I just started using Code first approach for creating databases. I have following 3 tables :
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; }
}
Here AccountHolder
and Nominee
both have 1 to *
replationship with the address. The fluent API code which i used for this is :
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);
}
Now my issue is whenever i am trying to insert data in AccountHolder or Nominee i got this exception :
In case of AccountHolder insertion
{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.Addresses_dbo.Nominees_NomineeId\". The conflict occurred in database \"CodeFirst.BankContext\", table \"dbo.Nominees\", column 'NomineeId'.\r\nThe statement has been terminated."}
In case of Nominee insertion
{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId\". The conflict occurred in database \"CodeFirst.BankContext\", table \"dbo.AccountHolders\", column 'AccountHolderId'.\r\nThe statement has been terminated."}
Cananybody please tell me how to solve this issue and what i am missing here ?
You try to insert Address Nominees_NomineeId that is not exists in Nominee.You should First instance of Nominee then fill value and create Address and fill value last create instance of AccountHolder.and then save