我正在从现有数据库到CodeFirst进行映射,而且我遇到了一对多关系的问题。
System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参阅内部异常---> System.Data.Entity的。 Core.UpdateException:发生错误 更新条目。有关详细信息,请参阅内部异常---> MySql.Data.MySqlClient.MySqlException:无法添加或更新子项 row:外键约束失败
我有一个像这样的T_USER实体。
public partial class T_USER{
public T_USER(){
this.T_OBJECTS = new HashSet<T_OBJECTS> ();
this.T_OBJECTS1 = new HashSet<T_OBJECTS> ();
}
[Key]
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection <T_OBJECT> T_OBJECTS { get; set; }
public virtual ICollection <T_OBJECT> 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&#34;未知列T_USER_OID&#34;
我发现,如果我的数据库字段名称不遵循Code First约定,我必须使用Fluent API实现一对多关系,并且我已经编码如此。
public class T_OBJECT_Map : EntityTypeConfiguration <T_OBJECTS>
{
public T_OBJECT_Map()
{
this.HasRequired<T_USER>(M => M.T_USER)
.WithMany(U => U.T_OBJECTS)
.HasForeignKey(M => M.USER1);
this.HasRequired<T_USER>(M => M.T_USER1)
.WithMany(U => U.T_OBJECTS1)
.HasForeignKey(M => M.USER2);
}
}
使用此代码,我在此问题的开头提到了例外。
我还尝试使用此代码将DBInitializer设置为null,以防止EF尝试在数据库中写入但是它失败并具有相同的异常
Database.SetInitializer<Context>(null);