实体框架实体拆分为一对多

本文关键字:实体 一对多 拆分 框架 | 更新日期: 2023-09-27 18:34:49

我们试图将EF用作Business Entity Mapping model。我们希望平展表(实体拆分(并为该类生成业务对象,而不是为每个类生成 1 个表,让实体框架处理 CRUD

此外,我们有一个现有的数据库,无法修改架构。我们已经尝试了代码优先和数据库优先的解决方案,但我们无法达到我们的既定目标。

我们拥有什么:

 public class Call
 {
    public int CallId {get;set;}
    public DateTime callTime {get;set;}
    public int PhoneTypeId {get; set;}
    public virtual PhoneType PhoneType {get; set;}
}
public class PhoneType 
{
     public int PhoneTypeId {get ;set;}
     public string TypeOfPhone {get ;set;}
}

我们想要什么:

public class CallDetails
{    
    public int CallId {get;set;}
    public DateTime callTime {get;set;}
    public string TypeOfPhone {get; set;}
}

编辑

我们在 ef 5 上,但可以升级到 ef 6。

编辑

为了更清楚地说明问题,我正在寻找一种方法将多个表平展为 1 个实体,然后在将一个编辑保存回数据上下文时让 EF 自动更新多个表

编辑

如果第一个实体具有第二个实体

的主键,而第二个实体没有任何与第一个实体相关的键,是否有办法将 1 个实体映射到第二个实体?

实体框架实体拆分为一对多

如果您不喜欢 EF 为您构建类的方式,请根据需要创建自己的类。(假设你有 C# 6,我写了以下内容(

public class CallDetails
{
    public Call entityCall { get; set;}
    public int CallId => entityCall.CallId;
    public DateTime callTime {
            get{ return entityCall.callTime;}
            set{ entityCall.callTime = value;}
        }
    public string TypeOfPhone => entityCall.PhoneType.TypeOfPhone;
}

然后当你使用它时

var details = new CallDetails(){ entityCall = db.Calls.Find(id) };

您可以访问您设置的结构中的值。话虽如此,我建议使用 EF 的类。在编辑数据库中的值时,这样做可能会令人头疼。