【发布时间】:2013-11-13 11:54:19
【问题描述】:
目前我的 WPF 应用程序正在使用实体框架(代码优先),我在项目中遇到了一个新功能。在这个新功能中,我需要在运行时在 MS SQL Server DB 中创建表。这些表将包含随机数量的列,它们也可以稍后更新。
我对如何在运行时生成数据模型类感到困惑 (在 DB 中创建的新表)?
以及我将如何在我的代码中使用它们 ?
我想到了一个解决方案(我还没有实现)
我应该创建一个新的表名“TableNamesandFields”,其中将包含新的表名和列名。通过使用“TableNamesandFields”表,我将维护新的表结构。
通过使用“TableNamesandFields”中的数据,我可以创建新表的临时数据模型(目前我不知道有什么方法)并在我的视图中使用它们
如果有人实施和处理过这样的情况,请帮帮我
【问题讨论】:
-
请问在运行时动态生成表的用例场景是什么?这提示(我当然可能是错的)设计问题。
-
@Moo-Juice 用例场景:应用程序中的任何用户都可以创建一些文档模板(DT1),如开票发票等。用户将添加发票的某些字段集(然后将创建新表与字段)。 DT1 可用于维护发票清单。 (有人告诉我)以前它是在单个表中维护的(包含所有文档模板),因此查询结果时间太长...
-
I need to create tables in MS SQL Server DB on runtime- 这不是 O/RM 的用途。也就是说,使用Entity Framework Code First,您实际上可以通过合并其他实体并通过OnModelCreating()映射它们来做到这一点,您将不得不使用Migrations。也就是说,有更好的方法,例如将文档模板以 XML 格式存储在单个DocumentTemplate表中,然后将各个字段值存储在第二个表DocumentFields中。 -
@HighCore 我会研究你建议的解决我问题的方法
-
我建议不要强迫 EF以某种方式设法做到这一点,而是重新审视你对 EF 的使用。 EF 的目标并不是您所采用的方向和您的设计方法。阅读您的 cmets 表明您的想法大错特错 - 为每个新模板制作一个新表格可能是最糟糕的做法。你说的是多少行?就在昨天,我正在玩一个大(ish)表(900000 行),使用自连接查询需要 0.02 秒或更短,这让我认为您的表没有正确索引以查看“太高”的查询时间
标签: c# wpf entity-framework dynamic-data