EF等效于NHIBERNATE公式映射



我正在研究公司决定转移到EF的一些旧版NHIBERNTE代码。我发现使用公式图的流利映射,并希望在EF(6.*(中复制它。据我了解,EF中没有公式映射,但希望有人提供A Simple 解决方案或解决方法。

简化实体:

public class Department
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual bool CanChange { get; set; }        
}

简化的NHIBERNATE地图:

public DepartmentMap()
{
    Map(x => x.Name);
    Map(x => x.CanChange)
      .Formula("(select case when count(*) > 0 then 0 else 1 end from Users where Users.placeid = Id)");
}

您可以更改数据库吗?

这看起来像是(未经使用的(计算列的候选人。

添加列,然后将其映射为常规属性,并将其标记为ReadOnly。

您将需要为查询创建一个函数,因为它使用另一个表

CREATE FUNCTION dbo.getCanChangeDepartment(@placeId int)
RETURNS bit
AS
BEGIN
    DECLARE @r bit
    select @r = case when count(0) > 0 then cast(0 as bit) 
     else cast(1 as bit) end 
     from Users 
     where Users.placeid = @placeId
    RETURN @r
END
ALTER TABLE dbo.Department
   ADD CanChange AS dbo.getCanChangeDepartment(Id)

另一种方法是创建一个返回所有部门以及是否可以更改的视图。

用ef。

映射

创建与部门的1比1加入关系。

最新更新