如何解决C#实体框架内存数据库如何在单元测试中跳过或测试标量函数
我的实体上下文中有以下 DbFunction
:
[DbFunction("fn_Replicate")]
public static string Replicate(string padChar,int patternLength,string value) => throw new Exception;
CREATE FUNCTION [dbo].[fn_Replicate]
(@ReplicateChar CHAR(1) = '0',@PatternLength INT,@FieldValue NVARCHAR(10))
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @Result NVARCHAR(10)
SELECT @Result = REPLICATE(@ReplicateChar,@PatternLength - LEN(@FieldValue)) + @FieldValue
RETURN @Result
END
在我的 C# 代码中:
if (query.Any(usr => OrganisationContextNew.Replicate("0",(EmployeNumberPatternLength - usr.PersonNumber.Length),usr.PersonNumber) ==
OrganisationContextNew.Replicate("0",(EmployeNumberPatternLength - employeeNumber.Length),employeeNumber)
&& usr.CompanyCode.Code.Equals(companyCode,StringComparison.OrdinalIgnoreCase)))
我正在使用内存数据库,当我运行单元测试时,它因函数而失败并抛出上下文中定义的新异常。
我的测试设置是:
[SetUp]
public virtual void Setup()
{
_fixture = new Fixture().UseDefaultBehaviors(skipNonPrimitiveMembers: true);
var options = new DbContextOptionsBuilder<OrganisationContextNew>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
_context = new OrganisationContextNew(options);
}
谁能帮我解决这个问题?
它适用于以下实现:
[DbFunction("fn_Replicate")]
public static string Replicate(char padChar,string value)
{
var padLength = patternLength - value.Length;
return padLength >= 0 ? value : value.PadLeft(padLength,padChar);
}
解决方法
[DbFunction("fn_Replicate")]
public static string Replicate(char padChar,int patternLength,string value)
{
var padLength = patternLength - value.Length;
return padLength >= 0 ? value : value.PadLeft(padLength,padChar);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。