我在数据库中有一个表,它有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。延迟加载
答案 0 :(得分:1)
简而言之,实体框架'将其抽象出来'。
它足够聪明地认识到你的FK代表关系,因此允许你自己处理对象。因此,您不必担心检查FK约束等,例如,SolutionTypeId - 您只需要向SolutionType
对象添加Device
对象,然后让实体框架对其进行排序。 (当然,如果您尝试添加违反SolutionType
PK的新SolutionType
,这会导致问题,因此您可能需要先从SolutionTypes表中找到现有对象。
因此,不要将其视为通过FK链接到Device
表的SolutionType
表,而只需将其视为具有Device
的{{1}}对象作为财产的对象。当您保存更改时,EF会为您排序数据库(假设您的模型准确无误!)