2

私は以下のようなエンティティ構造を持っています

public abstract class Entity
{
    public int Id { get; set; }
}

public class User : Entity
{
    public ICollection<Product> Products { get; set; }
}

public class Warehouse : Entity
{
    public ICollection<Product> Products { get; set; }
}

public class Product : Entity
{
    public Warehouse Warehouse { get; set; }

    public User User { get; set; }
}

ご覧のとおり、ユーザーは製品を所有でき、倉庫も製品を所有できます。そのため、エンティティ フレームワークは、null 値を許容できる Product テーブルに 2 つの外部キーを配置します。

以下のように、少し異なるエンティティ モデリングによって同様の構造を実現することもできます。

 public class User : Entity
 {
    public ICollection<UserProduct> Products { get; set; }
 }

public class Warehouse : Entity
{
    public ICollection<WarehouseProduct> Products { get; set; }
}

public class Product : Entity
{

}

public class WarehouseProduct : Entity
{
    public Product Product { get; set; }
    public Warehouse Warehouse { get; set; }
}

public class UserProduct : Entity
{
    public Product Product { get; set; }
    public User user { get; set; }
}

最初のデザインは、新しいエンティティを導入することなくシンプルに見えますが、それが優れているかどうかはわかりません。

私はどちらが最善か、またはどの状況が他のものよりも優れているかを見つけようとしています.

4

1 に答える 1

1

継承も可能です (EF/CodeFirst):

public abstract class Entity
{
    public int Id { get; set; }
}

public class Product : Entity
{

}

public class Warehouse : Product
{ 
    /* all product fields are available */   
}

public class User : Product
{
    /* all product fields are available */
}

これは私の観点ではよりDRYです=>「CodeFirstビュー」。

継承に関する良い投稿: http://goo.gl/1igQ3

于 2012-06-17T15:00:57.810 に答える