我刚刚问了question并得到了解决方案,但解决方案创建了一个新问题,我在这里提到。在这里,我修改我的代码并在AccountHolder
和Nominee
之间创建新的1对1关系。通过代码优先发送1到多个关系
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual List<Address> Address { get; set; }
public virtual Nominee Nominee { get; set; }
}
public partial class Nominee
{
public int NomineeId { get; set; }
public virtual List<Address> Address { get; set; }
}
public partial class Address
{
public int AddressId { get; set; }
public int AccountHolderId { get; set; }
public AccountHolder AccountHolder { get; set; }
public int NomineeId { get; set; }
public Nominee Nominee { get; set; }
}
它们之间的关系如下:
1 to many between AccountHolder and Address
1 to many between Nominee and Address
1 to 1 between AccountHolder and Nominee
的流畅API代码是这样的:
modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Nominee)
.WithRequired()
.WillCascadeOnDelete(false);
modelBuilder.Entity<Address>().HasRequired(p => p.AccountHolder)
.WithMany(p => p.Address)
.HasForeignKey(p => p.AccountHolderId)
.WillCascadeOnDelete();
modelBuilder.Entity<Address>().HasRequired(p => p.Nominee)
.WithMany(p => p.Address)
.HasForeignKey(p => p.NomineeId)
.WillCascadeOnDelete();
首先,如果有任何改善的范围比请建议我。现在我在这里面临的问题是每当我插入AccountHolder
我必须创建一个空的实例Nominee
,并在插入Nominee
我必须创建AccountHolder
的空实例。如果我不会这样做比我在前面的问题中提到的错误还要多。任何人都可以指导我如何解决这个问题,请在您的解决方案中添加示例代码。
代码我使用插入数据是:
var accountHolder = new AccountHolder() {
AccountHolderId = 901,
Address = new List<Address>()
{
new Address()
{
HouseNumber = hnumber,
Street = street,
Nominee = new Nominee() //this is the issue
}
},
Nominee = new Nominee()
{
Address = new List<Address>()
{
new Address()
{
HouseNumber = n_hnumber,
Street = n_street,
AccountHolder = new AccountHolder() //this is the issue
}
}
}
};
谢谢!
嘿,我想你的代码。并添加了一个新账户,只提供accountHolderId,它对我有用。顺便说一下,你的班级和关系是错误的,在句法上他们是正确的,虽然 – 2013-03-03 15:49:02
当你为账户持有人插入地址时会出现问题,你能告诉我我的班级逻辑有什么问题吗? – gaurav 2013-03-03 15:54:03
这是因为,您的地址表需要依赖两个FK,AddressId和NomineeId。地址表中的任何条目都将首先需要这两个条目。因此您必须在逻辑上输入代理人和地址两者 – 2013-03-03 15:57:08