我正在使用 Entity Framework 6 Code First 将大型 POCO 模型存储在数据库中。该模型恰好有 1000 个属性(不要问 lol**),这意味着它必须拆分为多个 SQL 表(列限制为 1024)。我知道这通常是通过像这样指定各个列来完成的:
modelBuilder.Entity<HugeEntity>.Map(m =>
{
m.Properties(e => new { e.Prop1, e.Prop2 });
m.ToTable("HugeEntity1");
}.Map(m =>
{
m.Properties(e => new { e.Prop3, e.Prop4 });
m.ToTable("HugeEntity2");
};
我想知道是否有任何方法可以做到这一点而不必单独指定属性。理想情况下,它可以根据给定的列限制(即 1000)自动对实体进行分区。
即使没有标准方法,最简单的破解方法是什么?模型的属性可能会发生变化,所以我真的很想避免在不止一个地方详尽地列出它们。
感谢任何建议!
**CONTEXT:这是一个域模型,表示应该在某个网页上捕获的用户输入的数据。它还在 WebAPI 中公开。我的团队考虑过键/值对方法,但认为这会使数据更难被 future 使用 WebAPI 的 BI 应用程序使用。
最佳答案
你对我们说“不要问”。但你最大的问题是你在对自己说。如果您的模型的字段数超过 50 个,那么您需要询问发生了什么。我想知道是否值得深呼吸并重新审视计算中的一些更抽象的概念。我将从 Database Normalization 开始. 1K 动态属性告诉我你迫切需要这个。
顺便说一句,“数据库规范化”概念本身并不特定于 SQL 数据库。您应该尽可能地规范化您的 POCO 模型。诚然,在 OO 语言中有一些非关系概念。但是没有理由为您所描述的极端情况找借口。
另一个范例可能是 Domain Driven Design .我自己对此不太熟悉,所以这就是为什么我不说你应该从那里开始。但从一开始我就开始实现它,我会说学习曲线是值得的。
我应该小心不要居高临下。我自己并没有完全拥有最高范式的所有表格。但我会告诉你,在我不注意的区域,头痛会更强烈。
关于c# - Entity Framework 以编程方式将模型拆分为多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810616/