对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中,这些协会是如何建立的?
答案 0 :(得分:2)
设置导航属性的常规方法是使用模型构建器,这为您提供了一个流畅的api来设置关联,看看这个有关如何进行此操作的深入内容。
http://xhalent.wordpress.com/2011/01/21/configuring-entity-framework-4-codefirst/
如果您没有手动设置导航属性,实体框架会猜测您的意思,在上述情况下,它可能会按预期设置您的导航属性,因为您在客户和BrokerageAccount之间只有一个1- *关系看起来很明智。
还有一个属性方法可用于设置导航属性。