【问题标题】:Entity Framework - making a large edmx table more manageable by splitting?实体框架 - 通过拆分使大型 edmx 表更易于管理?
【发布时间】:2011-08-25 09:11:03
【问题描述】:

我认为这是给猫剥皮的最佳技术或最佳方法的问题!

想象一个带有项目(菜单选项)的菜单。我有一个名为 MenuItem 的表,例如“Spaghetti Bolognese”,除了更好的描述和图片之外,它还有很多与之相关的其他信息。 例如。

  • 基本信息(名称、描述、图片等)
  • 营养信息(约 15 列)
  • 过敏信息(约 16 列)
  • 饮食信息(另外 7 列)(宗教等)

目前,我将所有内容都保存在 SQL Server 的 one 表中,这对我来说是逻辑数据库设计,因为它不会重复,尽管它为桌子比我想要的长。对于不断扩展数据库表,我已经感觉有点糟糕了。但现在我们还想添加“食谱”信息,大约另外 7 列。

我正在使用 Entity Framework 4.latest,并且觉得可能有一些功能可以帮助我在 EDMX 中拆分它? (这就是 ComplexTypes 吗?)或者我只需要在我调用的 ViewModel 类中执行此操作?

我认为我在代码中使用的更好地隔离事物的方法类似于

  • MenuItem.Recipe.Ingredients
  • MenuItem.Nutrition.Fat

【问题讨论】:

    标签: c# sql-server asp.net-mvc entity-framework


    【解决方案1】:

    复杂类型可以帮助您,但请注意,复杂类型不能包含导航属性,不能为空,并且始终与实体一起加载。其他可能性是使用table splitting - 这将允许您将多个一对一相关实体映射到同一个表。分表的主要特点是:

    • 实体只能共享主键属性
    • 有一个主要实体,其他实体被视为关系(导航属性)
    • 相关实体必须存在 - 它们不是可选的,因此当您插入新的主实体时,即使它们为空,您也必须插入这些相关实体
    • 必须使用急切、延迟或显式加载来加载相关实体

    【讨论】:

    • 我最初来自数据库背景而不是编程。因此,我不能让自己打破数据库设计以适应 EDMX 编程。我真的希望有一种更简洁的方法来处理这个问题。
    • 这不会破坏您的数据库设计 - 您仍将拥有一张大数据库表,但您的对象模型将更加精细。
    • 我现在明白你的意思了。谢谢拉迪斯拉夫。还在“Entity Framework 4.0 Recipes: A Problem-Solution Approach”-Recipe 2-7 中找到了另一个类似的示例。跨多个实体拆分表。
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2013-01-17
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多