一对多 entity framework 错误
One to Many entity framework error
我有 2 个模型,用户和电话。一个用户可以有多个电话号码。
我的用户代码:
public class User
{
public User()
{
this.TelephoneNumbers = new List<Telephone>();
}
public int UserId { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string FirstLine { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public string Email { get; set; }
public int TravelDistance { get; set; }
//[Display (Name = "Full Name")]
public string FullName
{
get { return Forename + " " + Surname; }
}
//List to store telephone numbers for the users
public virtual ICollection<Telephone> TelephoneNumbers { get; set; }
}
我的电话号码:
public class Telephone
{
public int TelephoneId { get; set; }
public string TelephoneNumber { get; set; }
//Used to get UserId from User table
public int UserId { get; set; }
public virtual User User { get; set; }
}
用户映射:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
//Table Mapping
this.ToTable("User");
//Primary Key
this.HasKey(u => u.UserId);
//Properties
this.Property(u => u.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(u => u.Forename)
.IsRequired();
this.Property(u => u.Surname)
.IsRequired();
}
}
电话地图
public class TelephoneMap : EntityTypeConfiguration<Telephone>
{
public TelephoneMap()
{
//Table Mapping
this.ToTable("Telephone");
//Primary Key
this.HasKey(t => t.TelephoneId);
//Properties
this.Property(t => t.TelephoneId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(t => t.TelephoneNumber)
.IsRequired();
//Relationship
//FK_Telephone_User
//One to many relationship between user & telephone
//One User has an iCollection of Telephone numbers
this.HasRequired(t => t.User)
.WithMany(t => t.TelephoneNumbers)
.HasForeignKey(t => t.UserId);
}
}
我有 运行 添加迁移初始化,然后是更新数据库。
我收到以下错误:
System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Telephone_dbo.User_UserId". The conflict occurred in database "API_Context-20150311183614", table "dbo.User", column 'UserId'
我认为这与我的电话型号中的 UserId 有关?当我播种数据库时,我不需要这个来将两者连接在一起吗?
是的,你知道。 telephone 号码通过外键链接到用户。您需要通过指定用户的 id 来指定它是谁的 telephone 号码。您的约束被破坏的事实是由以下可能的原因之一造成的:
- 不可为空的外键(telephone 始终链接到用户,它不应该漂浮在空中)
- 外键可能有一个默认值,该值在用户中不存在 table
无论如何,如果我们谈论 phone 号码和用户,对我来说,让它可以为 null 以防止错误似乎是不可信的,因为我没有看到任何未链接的 phone 号码的使用然而,对用户来说,我对你的项目了解不多,因此,我的直觉可能是错误的。所以,你可以通过使外键为空来解决问题,但似乎是错误的方法。相反,我相信您的代码应该始终指定有效的 phone 数字。
我有 2 个模型,用户和电话。一个用户可以有多个电话号码。
我的用户代码:
public class User
{
public User()
{
this.TelephoneNumbers = new List<Telephone>();
}
public int UserId { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string FirstLine { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public string Email { get; set; }
public int TravelDistance { get; set; }
//[Display (Name = "Full Name")]
public string FullName
{
get { return Forename + " " + Surname; }
}
//List to store telephone numbers for the users
public virtual ICollection<Telephone> TelephoneNumbers { get; set; }
}
我的电话号码:
public class Telephone
{
public int TelephoneId { get; set; }
public string TelephoneNumber { get; set; }
//Used to get UserId from User table
public int UserId { get; set; }
public virtual User User { get; set; }
}
用户映射:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
//Table Mapping
this.ToTable("User");
//Primary Key
this.HasKey(u => u.UserId);
//Properties
this.Property(u => u.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(u => u.Forename)
.IsRequired();
this.Property(u => u.Surname)
.IsRequired();
}
}
电话地图
public class TelephoneMap : EntityTypeConfiguration<Telephone>
{
public TelephoneMap()
{
//Table Mapping
this.ToTable("Telephone");
//Primary Key
this.HasKey(t => t.TelephoneId);
//Properties
this.Property(t => t.TelephoneId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(t => t.TelephoneNumber)
.IsRequired();
//Relationship
//FK_Telephone_User
//One to many relationship between user & telephone
//One User has an iCollection of Telephone numbers
this.HasRequired(t => t.User)
.WithMany(t => t.TelephoneNumbers)
.HasForeignKey(t => t.UserId);
}
}
我有 运行 添加迁移初始化,然后是更新数据库。
我收到以下错误:
System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Telephone_dbo.User_UserId". The conflict occurred in database "API_Context-20150311183614", table "dbo.User", column 'UserId'
我认为这与我的电话型号中的 UserId 有关?当我播种数据库时,我不需要这个来将两者连接在一起吗?
是的,你知道。 telephone 号码通过外键链接到用户。您需要通过指定用户的 id 来指定它是谁的 telephone 号码。您的约束被破坏的事实是由以下可能的原因之一造成的:
- 不可为空的外键(telephone 始终链接到用户,它不应该漂浮在空中)
- 外键可能有一个默认值,该值在用户中不存在 table
无论如何,如果我们谈论 phone 号码和用户,对我来说,让它可以为 null 以防止错误似乎是不可信的,因为我没有看到任何未链接的 phone 号码的使用然而,对用户来说,我对你的项目了解不多,因此,我的直觉可能是错误的。所以,你可以通过使外键为空来解决问题,但似乎是错误的方法。相反,我相信您的代码应该始终指定有效的 phone 数字。