当前位置: 首页 > 知识库问答 >
问题:

实体框架:类别/产品关系模型

龙嘉玉
2023-03-14

我有以下实体框架的数据模型。

我有一个抽象的产品。每种产品都与一类产品相关。例如:

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

问题:类别应仅与某些具体产品类型的产品相关。一、 e.我需要能够将混凝土产品分类,例如:

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

如何在我的实体框架模型中描述此限制?或者可能有一些建立这些关系的最佳实践?


共有2个答案

许远航
2023-03-14

使用列表和类别管理器:

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;
}
满和安
2023-03-14

这很难回答,因为它太依赖于你的项目的必要条件。

有三种不同的方法来表示继承层次结构:

每个层次表(TPH):通过对SQL模式进行非规范化来启用多态性,并利用保存类型信息的类型鉴别器列。

每个类型的表(TPT):将“is a”(继承)关系表示为“have a”(外键)关系。

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

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

 类似资料:
  • 我正在尝试创建一个电子商务网站,一个基本的阿里巴巴网站。最终目标是创建彼此不严格相关的n类产品(即鞋子和葡萄酒)。 我的主要问题是找出一种方法来处理与产品表相关的类别表/实体。 产品表将具有通用属性,而ProductCategoryEntity中的属性将特定于类别。 如何创建足够灵活的 ERD 来处理此目标? 我考虑过创建一个product_TO_productCategoryEntity表来链接

  • 问题内容: 在使用ES(或Solr)对产品变量进行建模时,我的头脑破了 考虑(人为的例子): 不同的产品(例如T恤) 每个产品都有一组属性(产品编号,名称,描述,品牌,颜色,受欢迎程度) 每个产品都有一组具有属性(productvariantid(productid ++ size的组合),productid,大小,可用性,价格的productvariant) 这似乎是产品与产品变体之间的标准父/

  • 我在我的ASP.NET 4.5网络项目中使用了实体框架。我有一个产品表,每个产品都有其类别和子类别。一个类别可能没有子类别。 餐桌产品 id 名称 category_id 子类别_id 日期 表类别 category_id parent_category_id 如果该类别具有,则它是父类别,否则它是同一表中另一个类别的子类别。 我想在Entity Framework中创建一个查询,按日期从最新到最

  • 我使用ACF关系字段来显示每个产品的相关博客文章。目前它的工作,但我必须检查每个产品手动显示一个相关的职位上。 问题:我如何添加产品类别,这样我就不需要手动添加200个产品,但只有一个产品类别与这篇文章相关,并将在单一视图下显示这篇文章。 是否可以将其与分类ACF字段集成(如果post具有相关的分类产品,它将显示在该类别的产品下)?可惜想不出办法

  • 时间框架❤: 介绍某个产品的时候,可以使用时间框架,解决了那些用户的那些问题设计了什么功能。 例如搜索产品😀: 1.搜索前:主要是降低搜索难度,发现用户想要可能想要搜索的,甚至用户都不知道自己想要搜索的东西,(猜你想搜,热榜,搜索历史)。 2.搜索中:降低搜索难度(联想+搜索的下拉,语言搜索,图片搜索,搜索暗纹词等等),帮助用户进行搜索。 3.搜索后:通过召回和排序,结合算法特征,给用户结果页合

  • 如何模拟AsNoTracking方法? 在下面的示例中,DbContext已经注入到服务类中,如果我从GetOrderedProducts方法中移除AsNoTracking扩展方法,它可以正常工作,但是with AsNoTracking测试失败,因为它返回null。我还试图模拟AsNoTracking以返回正确的值,但它不起作用。