2

我的数据库中有这些架构:

Tb1: { Id:int , NameTb1:varchar(50) }
Tb2: { Id:int , NameTb2:varchar(50) }
Tb1Tb2 { Tb1Id:int , Tb2Id:int }

显然Tb1Tb2是一个关系表,我想在 EF 代码优先中定义一个多对多关系。

这些是实体类:

public class Tb1 
{
   public Tb1()
   {
       ListTb2 = new List<Tb2>();
   }
   public int Id { get; set; }
   public string NameTb1 { get; set; }

   public virtual ICollection<Tb2> ListTb2 { get; set; }
}

public class Tb2 
{
   public Tb2()
   {
       ListTb1 = new List<Tb1>();
   }
   public int Id { get; set; }
   public string NameTb2 { get; set; }

   public virtual ICollection<Tb1> ListTb1 { get; set; }
}

和映射:

 public class Tb1Map : EntityTypeConfiguration<Tb1>
 {
    public Tb1Map()
    {
        this.HasKey(x => x.Id);

        this.HasMany(x => x.ListTb2)
            .WithMany(xx => xx.ListTb1)
            .Map
            (
                x =>
                    {
                        x.MapLeftKey("Tb1Id");
                        x.MapRightKey("Tb2Id");
                        x.ToTable("Tb1Tb2");
                    }
            );     
    }
}

public class Tb2Map : EntityTypeConfiguration<Tb2>
{
    public Tb2Map()
    {
        this.HasKey(x => x.Id);
    }
}

当我在我的应用程序中使用它时:

var sv1 = new TableService<Tb1>(_uow);
var sv2 = new TableService<Tb2>(_uow);

var t1 = new Tb1 { NameTb1 = "T111" };
sv1.Add(t1);
//var res1= _uow.SaveChanges();

var t2 = new Tb2 { NameTb2 = "T222" };
sv2.Add(t2);
//var res2 = _uow.SaveChanges();

t1.ListTb2.Add(t2);
var result = _uow.SaveChanges();

我收到此错误:

保存不为其关系公开外键属性的实体时发生错误。EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅 InnerException。

内部例外是:

INSERT 语句与 FOREIGN KEY 约束“FK_Tb1Tb2_Tb2”冲突。冲突发生在数据库“dbTest”、表“dbo.Tb2”、列“Id”中。

为什么我会收到此错误?解决方案是什么?tnx

4

1 回答 1

0

我删除

sv2.Add(t2);

它奏效了

于 2012-11-11T11:07:30.250 回答