代码第一实体框架中两个对象之间的关系

时间:2013-05-07 23:22:14

标签: entity-framework ef-code-first

所以我有一个Users类和一个产品类。

我正在使用Code第一种方法并尝试制作它以便我可以添加产品并且我可以添加用户,然后在两个对象之间映射关系而不具有外键关系。

因此,本质上用户将拥有多个产品,但产品将被定义。我通常会在一个数据库中执行此操作,其中查找表映射其中的两个,但我不能在我的生活中让Entity执行此功能并且正在考虑废弃它并进行数据库优先设计。

出于此问题的目的,您可以将用户视为具有ID的POCO和具有ID的POCO产品。

我觉得我在搜索时围绕这个问题跳舞,但我找不到任何可以解决它的问题,如果答案已经存在,那就很抱歉。

2 个答案:

答案 0 :(得分:1)

对象关系取决于Foreign Keys,至少我知道它应该如何。在您的情况下,您正在寻找one-to-many(这是一个有很多产品的用户)。

试试这个;

Public class User 
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int UserId { get; set; }

   public string Name { get; set; }

   public virtual ICollection<Product> Products { get; set; }
}

Public class Product
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int ProductId{ get; set; }

   [ForeignKey("User"), DatabaseGenerated(DatabaseGeneratedOption.None)]
   public int? UserId{ get; set; } 

   public string Name { get; set; }

   public virtual User User { get; set; }
}

答案 1 :(得分:0)

答案显然是Fluent API框架。

您必须在上下文中重写此方法

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().
              HasMany(c => c.ActiveProducts).
              WithMany(p => p.UsersOfProduct).
              Map(
               m =>
               {
                   m.MapLeftKey("UserId");
                   m.MapRightKey("ProductId");
                   m.ToTable("ProductUsers");
               });
        }

我仍然没有真正得到它的全部“HasMany,WithMany”语法,但这就是它的作用。您必须这样做,以便它知道创建关系表,而不是默认情况下将ID列加入到对象中。