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

时间:2015-09-16 14:27:13

标签: c# mysql entity-framework code-first ef-fluent-api

我正在从现有数据库到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);

0 个答案:

没有答案