我在数据库中有一个Scalar-Function,我使用DbFunction
属性映射到EF Core。我试图在值转换器中调用此DbFunction。所以我在DbContext中尝试以下内容。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(e => e.Firstname)
.HasConversion(e => e, e => GetTranslation());
}
[DbFunction("GetTranslation", "dbo")]
public static string GetTranslation()
{
throw new NotImplementedException();
}
可悲的是,这不起作用。 DbFunction不会被调用。有没有办法实现这个目标?
不,你不能。值转换器在客户端而不是数据库上运行,因此您的数据库功能无法在那里运行
唯一的方法是在c#中复制db函数代码,而不是抛出未实现的,你可以把那个逻辑放在那里。然后在你的值转换器上使用它,如果在数据库上调用该函数,它将使用db中的db函数,如果它在本地调用它将使用c#代码