多对多的关系身份错误

时间:2013-02-18 18:34:24

标签: c# ef-code-first many-to-many entity-framework-5

我正在使用ef5 codefirst开发一个mvc4应用程序,我无法解决此错误:

元数据集合中不存在标识为“xxxx”的成员。

更新 我看到我使用了两个不同的上下文(导航对象被称为创建不同DbContext的存储库),可能这是一个问题。我改变了,但现在我收到了一个新错误:

  

无效的列名称'Brewery_BreweryId'。

在IntelliTrace中,我看到ef尝试

select ..., Brewery_BreweryId from UserProfiles 

此列不存在且不应存在,我想要多对多,而不是一对多。

我认为这与多对多关系有关。

这是我的代码

的一个例子
internal class BreweryConfiguration : EntityTypeConfiguration<Brewery>
{
    public BreweryConfiguration()
    {
      // PK
      HasKey(e => e.BreweryId);

      // FK
      HasMany(e => e.UserProfiles)
        .WithMany()
        .Map(m =>
        {
          m.MapLeftKey("BreweryId");
          m.MapRightKey("UserId");
          m.ToTable("BreweryUserProfiles");
        });

    namespace Project2.DAL.Entities
    {
      [Table("Breweries")]
      public class Brewery : ABrewery
      {
        public int BreweryId { get; set; }
        public ICollection<UserProfile> UserProfiles { get; set; }
      }
    }

    namespace Project1.DAL.Entities
    {
      [Table("UserProfiles")]
      public class UserProfile : IUserProfile
      {

        [Key]
        public int UserId { get; set; }
        ...
      }
}

Join table

1 个答案:

答案 0 :(得分:1)

c.MapLeftKey("ClassB_ID");
c.MapRightKey("ClassA_ID");

应该是

c.MapLeftKey("ClassA_ID");
c.MapRightKey("ClassB_ID");

编辑:

您还需要在配置中定义ClassB的PK。在您实现的方式中,您可以为ClassB添加另一个派生配置。