1

对 EF 来说有点新,所以如果这个问题的答案很明显,请多多包涵。我正在做一个使用 EF 的教程,两个 DbSet 的定义如下:

    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);
        }
    }

我不知道如何在客户和 BrokerageAccount 之间建立关联/加入。在我的 VS 2010 项目中,我没有看到任何配置或其他文件来说明两个 DbSet 关联的内容、要使用的外键列等。

也许我遗漏了一些明显的东西或某种映射文件,但仅仅因为客户有一个 BrokerageAccount 的 ICollection 以及上面写着“导航属性”的评论,并没有做到这一点。在 EF 中,这些关联是如何建立的?

4

1 回答 1

2

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

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

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

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

于 2012-04-09T01:31:23.090 回答