我只是使用代码第一种方法,用于创建数据库开始。我有以下3个表:代码第一INSERT语句冲突与外键约束
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual List<Address> Address { 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; }
}
这里AccountHolder
和Nominee
都有1 to *
replationship与地址。我为此使用的流畅API代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>().HasRequired(p => p.AccountHolder)
.WithMany(p => p.Address)
.HasForeignKey(p => p.AccountHolderId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Address>().HasRequired(p => p.Nominee)
.WithMany(p => p.Address)
.HasForeignKey(p => p.NomineeId)
.WillCascadeOnDelete(false);
}
现在我的问题是,每当我试图在帐户持有人或代理人将数据插入我得到这个异常:
在账户持有插入的情况下
{ “INSERT语句冲突与外键约束\” FK_dbo.Addresses_dbo.Nominees_NomineeId \”。该冲突发生于数据库\ “CodeFirst.BankContext \”,表\ “dbo.Nominees \”,列“ NomineeId'。\ r \ n声明有蜜蜂Ñ终止。 “}
在提名插入
{的情况下” 的INSERT语句冲突具有外键约束\ “FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId \”。冲突发生于数据库\ “CodeFirst.BankContext \”,表\ “dbo.AccountHolders \”,列 'AccountHolderId'。\ r \ n该语句已终止。“}
Cananybody请告诉我如何解决这个问题,我在这里丢失了什么?
感谢的答案,它的工作原理。但现在每当我将插入提名人或账户持有人,我要创建为账户持有插入,并在提名插入的情况下,账户持有空对象的情况下,被提名人的空对象,有没有办法让我可以为这两种设置的默认值这些导航属性? – gaurav 2013-03-03 13:30:42
我想你应该插入值,然后使用它,例如你必须在表中插入值,然后使用它。 – 2013-03-03 13:32:46
好吧,但只是为了好奇心什么是为两者设置默认值的问题? – gaurav 2013-03-03 13:35:41