实体框架代码优先:DbSets和导航属性

时间:2012-04-08 23:43:05

标签: entity-framework ef-code-first associations

对EF来说有点新鲜,所以如果答案很明显,请耐心等待。我正在做一个使用EF的教程,两个DbSets定义如下:

    public DbSet<BrokerageAccount> BrokerageAccounts { get; set; }
    public DbSet<Customer> Customers { get; set; }

客户类看起来像这样 - 它是一个POCO(为简洁而削减了一些代码):

public class Customer
{
    public Customer()
    {
        BrokerageAccounts = new HashSet<BrokerageAccount>();
    }

    // Primitive properties
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // Navigation properties
    public ICollection<BrokerageAccount> BrokerageAccounts { get; set; }
}

}

BrokerageAccount类也是一个POCO,在设计上与Customer非常相似。

到目前为止一切顺利。我有一个问题的代码如下。在Customer和BrokerageAccount之间的主程序中有一个我不遵循的关联。代码如下:

    public Customer GetCustomer(string custId)
    {
        using (var context = DataContext)
        {
            return context.Customers
                .Include("BrokerageAccounts").SingleOrDefault(c => c.CustomerCode == custId);
        }
    }

我无法弄清楚Customer与BrokerageAccount之间的关联/加入方式。我在VS 2010项目中没有看到任何配置或其他文件,它们告诉我们两个DbSets的关联,使用什么外键列等。

也许我遗漏了一些显而易见的东西或者某种类型的映射文件,但仅仅因为客户有一个ICollection of BrokerageAccount以及上面写着“导航属性”的评论,并没有这样做。在EF中,这些协会是如何建立的?

1 个答案:

答案 0 :(得分:2)

设置导航属性的常规方法是使用模型构建器,这为您提供了一个流畅的api来设置关联,看看这个有关如何进行此操作的深入内容。

http://xhalent.wordpress.com/2011/01/21/configuring-entity-framework-4-codefirst/

如果您没有手动设置导航属性,实体框架会猜测您的意思,在上述情况下,它可能会按预期设置您的导航属性,因为您在客户和BrokerageAccount之间只有一个1- *关系看起来很明智。

还有一个属性方法可用于设置导航属性。