我正在研究公司决定转移到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加入关系。