【问题标题】:unidirectional many-to-many relationship with Code First Entity Framework与 Code First Entity Framework 的单向多对多关系
【发布时间】:2011-11-15 12:01:44
【问题描述】:

我是 EF 新手,并试图通过代码优先方法获得多对多单向关系。例如,如果我有以下两个类(不是我的真实模型),它们之间的关系是 N * N,但“客户”端没有导航属性。

public class User {
   public int UserId { get; set; }
   public string Email { get; set; }
   public ICollection TaggedCustomers { get; set; }
}
public class Customer {
  public int CustomerId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

映射代码看起来像...

modelBuilder.Entity()
        .HasMany(r => r.TaggedCustomers)
        .WithMany(c => c.ANavgiationPropertyWhichIDontWant)
        .Map(m =>
        {
            m.MapLeftKey("UserId");
                m.MapRightKey("CustomerId");
                m.ToTable("BridgeTableForCustomerAndUser");
        });

这种语法迫使我为“客户”实体使用“WithMany”。 以下url 表示“按照惯例,Code First 始终将单向关系解释为一对多。”

是否可以覆盖它,或者我应该使用任何其他方法?

【问题讨论】:

    标签: entity-framework-4.1


    【解决方案1】:

    使用这个:

    public class User {
        public int UserId { get; set; }
        public string Email { get; set; }
        // You must use generic collection
        public virtual ICollection<Customer> TaggedCustomers { get; set; }
    }
    
    public class Customer {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    

    并将其映射为:

    modelBuilder.Entity<User>()
        .HasMany(r => r.TaggedCustomers)
        .WithMany() // No navigation property here
        .Map(m =>
            {
                m.MapLeftKey("UserId");
                m.MapRightKey("CustomerId");
                m.ToTable("BridgeTableForCustomerAndUser");
            });
    

    【讨论】:

    • 非常感谢,多么简单的解决方案。为了挽回面子,我会把它归咎于缺乏文档,而不是我自己的无知。
    • 属性可以做到这一点吗?
    • @TDaver:不,属性只有在两端都有导航属性并且不希望控制联结表中的名称和列时才能工作。
    • .WithMany()。 ffs,你能变得更不直观吗? “有很多......什么都没有)”。至少我终于知道该怎么做了,谢谢拉迪斯拉夫!
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2014-05-02
    相关资源
    最近更新 更多