gpt4 book ai didi

entity-framework - 使用复杂类型的 Entity Framework 和 Fluent API

转载 作者:行者123 更新时间:2023-12-04 07:27:48 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.3 Code-FIrst 创建一个新的数据库模型;使用 Fluent API。虚拟模型如下。

所以我的主要对象是 Something,我需要跟踪它。所有其他项目都是补充性的。通常在数据库中,我会分配一个表,例如联系人、一个主键和一个用于关系的外键。但是,阅读有关 Fluent API 和 Complex Types 的更多信息, 特别是 this article ,我注意到(我认为)我可以让 EF 负责链接这些对象/表,我不必担心它们作为我的 MVC 应用程序中的存储库。

所以请注意:

  • Something 与 Contact 一对多
  • 联系人与地址具有一对多
  • 联系人与 PhoenNumber 一对多

知道这一点后,我的困惑就在于复杂类型,因为 Contact 是 Somethign 的复杂类型,Address 和 PhoneNumber 是 Something 的复杂类型。

  • 如何在 Fluent API 中设置这种关系?
  • 我怎么说 Address 是必需的?
  • 在 ASP.NET MVC 中使用域驱动开发,我是否必须维护 IContactRepository 和 IAddressRepository 的存储库才能推送到 Controller ?

(请注意,为简洁起见省略了一些代码。)

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

最佳答案

不,你的两个类都不是复杂类型。 Complex types必须遵守严格的规则。它们不能包含导航属性,并且因为它们被映射到拥有实体的表,所以除了与拥有实体的一对一关系之外,它们不能以任何其他形式表示。

关于entity-framework - 使用复杂类型的 Entity Framework 和 Fluent API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com