2015-04-23 103 views
1

一对多的关系我有2类Foo和Bar实体框架多很多使用代码首先

public class Foo 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public virtual int Id { get; set; } 


     private ICollection<Bar> _bar; 
     public virtual ICollection<Bar> Bars 
     { 
      get { return _bar?? (_bar= new Collection<Bar>()); } 
      set { _bar= value; } 
     } 
    } 

酒吧

public class Bar 
     { 
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
      public virtual int Id { get; set; } 


      private ICollection<Foo> _foo1; 
      public virtual ICollection<Foo> Foos1 
      { 
       get { return _foo1?? (_foo1= new Collection<Foo>()); } 
       set { _foo1= value; } 
      } 

       private ICollection<Foo> _foo2; 
       public virtual ICollection<Foo> Foos2 
       { 
        get { return _foo2?? (_foo2= new Collection<Foo>()); } 
        set { _foo2= value; } 
       } 


      } 

然后我使用迁移来更新数据库。但是,而不是有一个通常的表FooBar。 EF创建2个表格

Foo 
Id,Bar_Id 

Bar 
Id,Foo_Id,Foo_Id1 

这不是我想要的。我想我通过将2个Foo的集合添加到Bar中来搞砸了。我现在应该怎么做?

+0

那么,为什么你有2个集合?你想达到什么目的? –

+0

因为这是我必须应用的业务规则。考虑一种含有两种税种的物品,因此您将购买税(在您购买物品时适用的税)和销售税(在销售物品时将适用税)。现在你问,也许我的模型不太好,有什么建议吗? – Quannt

回答

1

想通了,我需要做2件事来解决这个问题。首先,添加酒吧的另一个集合的Foo

public class Foo 
     { 
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
      public virtual int Id { get; set; } 


      private ICollection<Bar> _bar; 
      public virtual ICollection<Bar> Bars 
      { 
       get { return _bar?? (_bar= new Collection<Bar>()); } 
       set { _bar= value; } 
      } 

      private ICollection<Bar> _bar2; 
      public virtual ICollection<Bar> Bars2 
      { 
       get { return _bar2?? (_bar2= new Collection<Bar>()); } 
       set { _bar2= value; } 
      } 
     } 

二,使用InverseProperty明确地告诉我要2个多一对多的关系EF。

public class Bar 
     { 
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
      public virtual int Id { get; set; } 


      private ICollection<Foo> _foo1; 
      [InverseProperty("Bars")] 
      public virtual ICollection<Foo> Foos1 
      { 
       get { return _foo1?? (_foo1= new Collection<Foo>()); } 
       set { _foo1= value; } 
      } 

       private ICollection<Foo> _foo2; 
       [InverseProperty("Bars2")] 
       public virtual ICollection<Foo> Foos2 
       { 
        get { return _foo2?? (_foo2= new Collection<Foo>()); } 
        set { _foo2= value; } 
       } 


      } 

我现在有4台富,酒吧,FooBarss和FooBar1

最终