【问题标题】:is it possible to generate data model class or structure dynamically ?? in entity framework?是否可以动态生成数据模型类或结构?在实体框架中?
【发布时间】: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


【解决方案1】:

WPF4.0 提供了使用 DynamicObject 将数据绑定到动态(运行时生成的)属性的能力,基本上,您应该继承 DynamicObject(也可以实现 INotifyPropertyChanged 接口),覆盖 TryGetMember 和 TrySetMember 方法。

我不熟悉这东西,所以我建议你看看这个帖子(http://miteshsureja.blogspot.com/2011/05/data-binding-improvements-in-wpf-40.html) 或使用关键字“WPF DynamicObject DataBinding”并询问谷歌。

**只有一件事,对于您的情况,您可能需要一个字典来维护动态属性(在发布后使​​用公开提交的“MyName”)。

【讨论】:

  • -1 这与 OP 的要求无关
  • @HighCore 实际上这可能很有用,因为 OP 想要“创建临时数据模型......并在我的视图中使用它们”。如果绑定字段名称仅在运行时已知,那么这是一个选项(另一个选项是使用方括号表示法绑定到字典)。但是当然首先应该避免整个情况......
猜你喜欢
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多