实体框架以编程方式将模型拆分为多个表

Kyl*_*lan 3 c# sql-server entity-framework entity-framework-6

我正在使用 Entity Framework 6 Code First 在数据库中存储大型 POCO 模型。该模型恰好有 1000 个属性(不要问哈哈**),这意味着它必须拆分为多个 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");
};
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以做到这一点,而不必单独指定属性。理想情况下,它可以根据给定的列限制(即 1000)自动对实体进行分区。

即使没有标准方法,最简单的方法是什么?模型上的属性可能会发生变化,因此我真的希望避免在多个地方详尽地列出它们。

任何建议表示赞赏!

**上下文:这是一个域模型,表示应在某个网页上捕获的用户输入的数据。它还在 WebAPI 中公开。我的团队考虑了键/值对方法,但认为这将使未来使用 WebAPI 的 BI 应用程序更难以使用数据。

pwi*_*cox 5

你对我们说“不要问”。但你最大的问题是你对自己说的。如果您的模型有超过 50 个字段,那么您需要询问发生了什么。我想知道是否不值得喘口气并重新审视计算中的一些更抽象的概念。我将从数据库规范化开始。1K 动态属性告诉我你迫切需要这个。

顺便说一句,“数据库规范化”概念本身并不特定于 SQL 数据库。您应该尽可能标准化您的 POCO 模型。诚然,面向对象语言中有一些非关系概念。但没有理由为你所描述的极端行为找借口。

另一个范例可能是领域驱动设计。我自己对此不太熟悉,所以这就是为什么我不说你应该从那里开始。但从一开始我就实施它,我想说学习曲线是值得的。

我应该小心,不要居高临下。我自己并没有将所有表格都采用最高范式。但我会告诉你,在我不擅长的领域,头痛会更严重。