我正在使用 Entity Framework 4.3 Code-FIrst 创建一个新的数据库模型;使用流畅的 API。虚拟模型如下。
所以我的主要对象是Something,我需要跟踪它。所有其他项目都是补充。通常在数据库中,我会分配一个表,例如联系人、一个主键和一个用于关系的外键。但是,阅读有关 Fluent API 和复杂类型的更多信息,尤其是这篇文章,我注意到(我认为)我可以让 EF 负责链接这些对象/表,我不必担心它们作为存储库我的 MVC 应用程序。
所以请注意:
- 与联系人有一对多的关系
- 联系人与地址有一对多
- 联系人与 PhoenNumber 一对多
知道了这一点,我的困惑在于复杂类型,因为 Contact 是 Somethign 的 Complext 类型,而 Address 和 PhoneNumber 是 Somethign 的复杂类型。
- 我将如何在 Fluent API 中设置这种关系?
- 我怎么说地址是必需的?
- 在 ASP.NET MVC 中使用域驱动开发,我是否必须维护 IContactRepository 和 IAddressRepository 的存储库才能推送到控制器?
(请注意,为简洁起见,省略了一些代码。)
// attempt
void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Contact>();
modelBuilder.ComplexType<Contact>().Property(p => p.Address).IsRequired(); // COMPILER ERROR
modelBuilder.ComplexType<Address>();
modelBuilder.ComplexType<PhoneNumber>();
}
// DUMMY MODEL
class Something()
{
void Something()
{
this.Contact = new HashSet<Contact>( );
}
DateTime DOB { get; set; }
int YearsEmployed { get; set; }
ICollection<Contact> Contact { get; set; }
}
class Contact()
{
void Contact()
{
this.Address = new HashSet<Address>();
}
ICollection<Address> Address { get; set; }
}
class Address()
{
string Street1 { get; set; }
string Street2 { get; set; }
string State { get; set; }
string City { get; set; }
string Zip { get; set; }
OptionName OptionName { get; set; }
}
class PhoneNumber()
{
string Number
OptionName OptionName { get; set; }
}
class OptionName()
{
string OptionName { get; set; }
}