使用DbContext(实体)与另一个类建立关系

时间:2014-02-25 10:12:29

标签: c# entity-framework asp.net-mvc-5

我的背景是:Using Razor to create a form for hierarchy of domain models

我有一个类Project和一个名为Projects的数据库中的表。

在此表中有一个名为AddressID的列...它与另一个地址表相关。

地址由几个属性组成......地址1,地址2,城市,国家,州。我已将它们映射到Address类中,以便它与地址表相关联。

因此,Project通过AddressID ...整数来与Address表相关。

在我的Project课程中,由于某种原因,我认为我可以这样做:

class Project
{
    Address Address;
}

然后我意识到当我去获取一个项目 - int列AddressID(项目关系列)时 - 它将尝试映射到Project的Address属性并说出类似“不兼容类型”的内容。我需要更像这样的东西吗?

class Project
{
    int AddressID {get;set;}

    Address Address {get;set;}
}

然后当我从项目存储库中调用一些项目时,我会使用AddressID(从db映射)将整个Address映射到Address属性,以提供足够的信息来查找Db中的Address?

这类事情的常用技术是什么?

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

class Project
{
    public int AddressID { get; set; }

    [ForeignKey("AddressID")]
    public Address Address { get; set; }
}

class Address
{
    // Your address properties here...
}

现在,当您从数据库中获取实体时,您可以使用Address中的Project扩展方法明确包含.Include()的{​​{1}},如下所示:< / p>

System.Data.Entity

如果您启用了延迟加载并且不处理public IEnumerable<Project> GetProjectsAndAddresses() { return myDbContext.Projects.Include(x => x.Address); } 实例,则当您尝试访问该实例时,EF将尝试加载该外部实体(在这种情况下,您不需要使用{{ 1}}方法)。