EF6 CodeFirst一对多MySQL外键约束失败

我正在从现有数据库到CodeFirst进行映射,我遇到了一对多关系的问题。

System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误。 有关详细信息,请参阅内部exception —> System.Data.Entity。 Core.UpdateException:更新条目时发生错误。 有关详细信息,请参阅内部exception —> MySql.Data.MySqlClient.MySqlException:无法添加或更新子行:外键约束失败

我有一个像这样的T_USER实体。

public partial class T_USER{ public T_USER(){ this.T_OBJECTS = new HashSet (); this.T_OBJECTS1 = new HashSet (); } [Key] public int ID { get; set; } public string Name { get; set; } public virtual ICollection  T_OBJECTS { get; set; } public virtual ICollection  T_OBJECTS1 { get; set; } } 

我也有这样的T_OBJECT实体。

 public partial class T_OBJECT (){ [Key] public int ID { get; set; } [Required] public int USER1 { get; set; } [Required] public int USER2 { get; set; } [ForeignKey("USER1")] public virtual T_USER T_USER1 { get; set; } [ForeignKey("USER2")] public virtual T_USER T_USER2 { get; set; } } 

使用此DataAnnotations,我有一个DBUpdateException“字段列表中的未知列T_USER_OID”

我发现,如果我的数据库字段名称不符合Code First约定,我必须使用Fluent API实现一对多关系,并且我编码如此。

 public class T_OBJECT_Map : EntityTypeConfiguration  { public T_OBJECT_Map() { this.HasRequired(M => M.T_USER) .WithMany(U => U.T_OBJECTS) .HasForeignKey(M => M.USER1); this.HasRequired(M => M.T_USER1) .WithMany(U => U.T_OBJECTS1) .HasForeignKey(M => M.USER2); } } 

使用此代码,我有一个例外,我在这个问题的开头提到过。

我还尝试使用此代码将DBInitializer设置为null,以防止EF尝试在数据库中写入但它失败并具有相同的exception

 Database.SetInitializer(null);