我在数据库中有一个表,其中有4个外键引用该表。当我将表添加到edmx时,表和导航属性就在那里。但是,该表中的外键ID丢失了,只有虚拟对象在那里。
这是.tt文件中生成的下表:
public partial class Device
{
public int SolutionId { get; set; }
public string SiteId { get; set; }
public string Name { get; set; }
public int SysId { get; set; }
public Nullable<int> SysType { get; set; }
public string SerialNumber { get; set; }
public Nullable<int> ParentId { get; set; }
public virtual DeviceModel DeviceModel { get; set; }
public virtual DeviceType DeviceType { get; set; }
public virtual SolutionApplication SolutionApplication { get; set; }
public virtual SolutionType SolutionType { get; set; }
}
缺少一些成员:
DeviceModelId, DeviceTypeId, SolutionApplicationId, and SolutionTypeId
为什么会丢失?有什么方法可以使这些键真正成为部分类的一部分?
使用EntityFrameworks v6.0.2。延迟加载
最佳答案
简而言之,实体框架“将其抽象”。
它足够聪明,可以识别您的FK代表关系,因此允许您使用对象本身。因此,您不必担心为诸如SolutionTypeId等检查FK约束等,您只需向SolutionType
对象添加Device
对象,然后让Entity Framework对其进行分类即可。 (当然,如果您尝试添加违反SolutionType
PK的新SolutionType
,则这会引起问题,因此也许您首先需要从SolutionTypes表中找到现有对象)。
因此,与其将其视为通过FK链接到Device
表的SolutionType
表,不如将其视为具有Device
对象作为属性的SolutionType
对象。保存更改时,EF会为您整理数据库(假设您的模型是正确的!)