22

我在 Visual Studio 2010 中使用 EF4。我已经创建了一个 SQL 数据库,并且我的所有列都记录在 SQL 管理工作室中的 Description 属性中。当我在 Visual Studio 中创建 edmx 时,如何让它读取这些描述并使用它们向我生成的类添加注释?我知道我可以在 edmx 属性中使用 Summary 和 LongDescription,但我正在寻找一种方法来做到这一点,而不必复制和粘贴每个描述。

谢谢!

4

3 回答 3

5

对此有一个功能请求。随时添加您的投票,以帮助将来提供此功能: 检索实体框架功能请求中的 SQL 描述

Huagati 有一些很好的工具来处理 EF 和 L2S。功能之一是更新基于 SQL 数据库的 EF 文档: Huagati 网站

从网站:从数据库更新 ADO.NET 实体数据模型文档从数据库检索自由文本表和列描述以及索引定义,并使用描述更新 EDMX 设计器中的 xml 文档字段。

似乎他们在数据库中查找这些字段,然后直接更新模型 XML。如果这是您想要的唯一功能,可能有人可以创建一个 VS 加载项,它可以在没有价格的情况下做同样的事情。我会把它添加到我的“未来”项目列表中(尽管我似乎从来没有时间做这些!)

希望有帮助!

于 2011-01-20T20:16:49.177 回答
2

我一直在寻找将某些东西组合在一起以使用数据库中的元数据填充 edmx 的方法。

摘要和详细描述 edmx 属性存储在 EntityType 元素下的元素中。

<EntityType Name="EntityName">
    <!-- Without this element classes are typically generated with 
         "No Metadata Documentation available." -->
    <Documentation>
            <Summary>Entity Summary</Summary>
            <LongDescription>Entity Long Description</LongDescription>
          </Documentation>
    <Key>
      <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="String" Nullable="false" MaxLength="25" Unicode="false" FixedLength="true" />
    <!-- Lots of other properties -->
  </EntityType>

edmx 文件的相关部分,即存储模式定义语言 (SSDL),由System.Data.Entity.Design.EntityStoreSchemaGenerator.GenerateStoreMetadata()创建。或者至少 EdmGen 就是这种情况。

我将查看EntityStoreSchemaGenerator.StoreItemCollection在被 EntityStoreSchemaGenerator.WriteStoreSchema(...) 用于输出 XML 之前是否可以修改。

更新

那很烦人。System.Data.Metadata.Edm.Documentation是密封的,只有一个内部构造函数。这两个感兴趣的属性也只能在内部设置。所以这似乎是一个死胡同。

于 2011-07-29T00:07:41.600 回答
1

我不知道设计器本身有什么可扩展点。但是,一旦在您的 edmx 文件中填充了 Summary 和 LongDescription 字段,这些值将保留在那里,即使您进行了其他更改或从数据库重新更新了您的模型。除非您删除表并重新添加它,否则这些值将保持填充状态。

因此,您可以一次复制并粘贴它们(模型中有多少表?这比您想象的要快),或者编写一个程序从数据库中提取信息(使用 SQL SMO 或其他东西) ,并让该程序编辑您的 edmx 文件,填充摘要和 LongDescription 字段(每次尝试您的程序时备份您的 edmx ——您不想破坏您的 edmx 文件而必须重新开始)。

如果您有大型模型,并且您正在制作大量模型,那么编写一个自动完成它的程序是值得您花时间的。如果您只有几个模型,没有太多表格,请复制粘贴。

您可能要考虑在此处向 Entity Framework 团队提交反馈。似乎设计人员应该自动从 SQL Server 中获取描述字段。会提出很好的功能要求。

于 2010-07-01T06:57:37.237 回答