2013-11-04 53 views
1

我有以下的实体框架数据模型。实体框架:类别/产品关系模型

我有抽象产品。每个产品都涉及一个类别的产品。例如:

public abstract class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Category Category { get; set; } 
} 

而且有具体的产品:

public class ConcreteProduct1 : Product 
{ 
    // some specific member 
} 

public class ConcreteProduct2 : Product 
{ 
    // some specific member 
} 

//etc. 

我有分层分类,例如:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Category Parent { get; set; } 
    public ICollection<Category> Children { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

每个类别都有ICollection<Product> Products

问题:类别应该只与产品的某些具体产品类型有关。即我需要能够得到混凝土制品分成类别,例如:

public Category<ConcreteProduct1> GetCategory<ConcreteProduct1>() 
{ 
    // should return Category that contain ICollection<ConcreteProduct1> 
} 

我怎么能在我的实体框架模型来描述这个限制?或者可能有一些建立这些关系的最佳做法?

回答

1

这是很难回答,因为它取决于你的项目的先决条件太多了。

有三种不同的方法可以用来表示继承层次结构:每层次(TPH

:通过反规范化SQL模式启用多态性,并且利用保持类型信息的类型鉴别列。

每种类型的表格(TPT:将“是”(继承)关系表示为“有”(外键)关系。

表具体类(TPC:完全从SQL架构中丢弃多态性和继承关系。

您应该检查链接并找到最适合您需要的模型。

0

使用列表和categorymanager:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Category Parent { get; set; } 
    public ICollection<Category> Children { get; set; } 
    public List<Product> Products = new List<Product>(); 
} 

public static class CategoryManager 
{ 
    public List<Category> Categories = new List<Category>(); 
} 

public Product test = new Product 
{ 
    Id = 1 
}; 

public Category add = new Category 
{ 
    Id = 1 
}; 

public void Init() 
{ 
    add.Products.Add(test); 
    CategoryManager.Categories.Add(add); 
} 

public Product GetByID(Category cat, string val) 
{ 
    return cat.Where(x => x.Id == val).ToArray()[0]; 
} 

public Category GetCat(Product pro) 
{ 
    foreach (var cat in CategoryManager.Categories) 
    { 
     if (cat == pro) return cat; 
    } 
    return null; 
} 
+0

谢谢,但不幸的是,我不明白你的答案:)我的问题与Entity Framewrok模型有关,即它涉及到ORM - 如何在数据库中表示我的域模型,由C#代码通过实体框架代码第一。我的问题 - 我不需要按类别获得父级产品,我需要按类别获得具体产品。我会澄清我的问题。 – karavanjo