EF4.3多对多表作为实体

时间:2016-05-20 10:57:45

标签: entity-framework mapping many-to-many

我有实体两个是正常的另一个是彼此之间的映射任何时候我把导航映射我得到无效的对象名称。 如果我尝试映射我已经在模式中获取表。

EntityA EntityB        EntityC
Id      Id             EntityA has FK} PrimaryKey 
Name    description    EntityB has FK}

映射类 在尝试了

之后,我已经对EntityB进行了导致我的问题和实体的所有导航

我在实体c中尝试了这个id,但仍然得到了无效的表名。它试图创建的名称是dbo.BA,其中实际的表是dbo.tblAB

 //entity.HasRequired(p => p.A).WithMany(p =>   p.C).HasForeignKey(p => p.EntityA);
 //entity.HasRequired(p => p.B).WithMany(p => p.C).HasForeignKey(p => p.EntityB)

我无法使用.map,因为我需要在DAL中使用所有三个实体 映射类 实体C

entity.HasKey(t => new {t.EntityA, t.EntityB});
            entity.Property(qa => qa.EntityA).IsRequired();
            entity.Property(qa => qa.EntityB.).IsRequired();
            entity.toTable("tblC)

这是退出表格,因为我们需要删除我们需要通过实体执行的这些记录。 实体B和实体A具有对实体C的ICollection属性和

的映射

实体A映射

entity.HasMany(g => g.C).WithRequired().HasForeignKey(p => p.EntityA).WillCascadeOnDelete(false);

在实体B映射中

entity.HasMany(g => g.C).WithRequired().HasForeignKey(p => p.EntityB).WillCascadeOnDelete(false);

在实体C映射中

entity.Property(t => t.EntityA).HasColumnName("EntityA");
            entity.Property(t => t.EntityB).HasColumnName("EntityB");
            entity.Map(c => c.ToTable("tblC")).HasKey(t => new { t.EntityA, t.EntityB });*

我收到了多重错误,但现在我收到了无效的列名'EntityC_EntityA'。列名称'EntityC_EntityB'无效。

UPDATE 我现在已经修复了架构 在EntityC

[Key, Column(Order = 0), ForeignKey("EntityA")]
[Key, Column(Order = 1), ForeignKey("EntityB"))

Navigaton属性

[ForeignKey("Id")]
public virtual EntityA EntityA { get; set; }
[ForeignKey("Id")]
public virtual EntityB EntityB { get; set; }

在实体A和B映射中

    entity.HasMany(g => g.Cs).WithRequired(p=>p.EntityA).HasForeignKey(p => p.EntityA).WillCascadeOnDelete(false);
entity.HasMany(g => g.Cs).WithRequired(p=>p.EntityB).HasForeignKey(p => p.EntityB).WillCascadeOnDelete(false);

问题是该查询正在尝试创建db.BA表。 我试过的查询是

ctx.EntityAs.Include(p => p.Cs.Select(pr => pr.EntityB))
        .Include(p => p.EntityBs.Select(pr => pr.Cs.Select(ps =>    ps.EntityA)))

1 个答案:

答案 0 :(得分:0)

我要感谢Gert Arnold提出了写作方向。架构的答案就在于问题 解决许多问题的Linq包括EntityC,其中选择B或A

$modelObject->save()

entityA.Include(p => p.Cs.Select(pr => pr.EntityA))