我在数据库中有一个表,其中有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会为您整理数据库(假设您的模型是正确的!)

09-26 05:42