C# 实体框架-通过拆分使大型edmx表更易于管理?

C# 实体框架-通过拆分使大型edmx表更易于管理?,c#,sql-server,asp.net-mvc,entity-framework,C#,Sql Server,Asp.net Mvc,Entity Framework,我认为这是一个关于剥猫皮的最佳技术或最佳方法的问题 想象一个菜单上有项目(菜单选项)。我有一张名为MenuItem的表格,例如“意大利肉酱面”,除了更好的描述和图片外,还有很多其他相关信息。 例如 基本信息(名称、描述、图片等) 营养信息(约15栏) 过敏信息(约16列) 饮食信息(另外7栏)(宗教等) 就目前而言,我在SQL server中的one表中拥有所有内容,这对我来说是一种逻辑数据库设计,因为它不会重复,尽管它使表的字段列表比我希望的更长。我已经对不断扩展数据库表感到有点不舒服了。

我认为这是一个关于剥猫皮的最佳技术或最佳方法的问题

想象一个菜单上有项目(菜单选项)。我有一张名为MenuItem的表格,例如“意大利肉酱面”,除了更好的描述和图片外,还有很多其他相关信息。 例如

  • 基本信息(名称、描述、图片等)
  • 营养信息(约15栏)
  • 过敏信息(约16列)
  • 饮食信息(另外7栏)(宗教等)
就目前而言,我在SQL server中的one表中拥有所有内容,这对我来说是一种逻辑数据库设计,因为它不会重复,尽管它使表的字段列表比我希望的更长。我已经对不断扩展数据库表感到有点不舒服了。但现在我们还想添加“配方”信息,大约还有7列

我使用的是Entity Framework 4.5最新版本,我觉得可能有一些功能可以帮助我在EDMX中将其分离?(这就是ComplexTypes吗?)

我想我在我的代码中使用了什么来更好地隔离事物

  • 菜单项、食谱、配料
  • MenuItem.Nutrition.Fat

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

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

我最初来自数据库背景,而不是编程背景。因此,我不能让自己打破数据库设计来适应EDMX的编程。我真的希望有一种更简洁的方法来处理这个问题。这不会破坏你的数据库设计-你仍然有一个大的数据库表,但你的对象模型会更精细。我现在明白你的意思了。谢谢你,拉迪斯拉夫。在“实体框架4.0配方:问题解决方法”配方2-7中还发现了另一个类似的示例。跨多个实体拆分表。