2013-05-07 119 views
0

所以我有一个Users类和一个产品类。代码第一个实体框架中的两个对象之间的关系

我使用的代码第一种方法,试图让这个我可以在产品中添加,我可以在用户添加,然后有两个对象之间的映射关系,而无需一个外键关系。

因此,在本质用户将有一个以上的产品,但产品会被定义。我通常会在数据库中使用映射它们的查找表来做这件事,但是我不能让我的生活得到Entity来完成这个功能,并且正在考虑废除它并且首先进行数据库设计。

对于这个问题的目的,你可以考虑用户只是POCO与ID和产品POCO一个ID。

我觉得我解决此问题跳舞,而搜索,但我无法找到任何解决它很抱歉,如果答案是在那里了。

回答

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列加入到对象上。

1

对象关系取决于Foreign Keys,至少这是我怎么知道它应该的。在你的情况下,你正在寻找one-to-many(这是一个用户与许多Porducts)。

试试这个;

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; } 
} 
+0

但我希望一个用户拥有许多产品,但每个产品只有一个产品。我通常这样做的方式是使用主键和具有关系的查找表的两个表。这样我就不必为每个用户拥有许多相同的产品。所以我认为这是一个多对多 – Roloc 2013-05-08 01:11:56

+0

好吧,你帮我意识到这是一个很多很多,我非常感激。我将提供的答案。谢谢! – Roloc 2013-05-08 01:43:01

+1

@Roloc是的,在这种情况下,你需要一个'多对多'的关系。 – Komengem 2013-05-08 02:15:47

相关问题