我在Visual Studio 2010中使用EF4。我已经创建了一个SQL数据库,并且我的所有列都记录在SQL管理工作室中的Description属性中。当我在Visual Studio中创建edmx时,如何让它读取这些描述并使用它们为我生成的类添加注释?我知道我可以在edmx属性中使用Summary和LongDescription,但我正在寻找一种方法来实现这一点,而无需复制和粘贴每个描述。
谢谢!
答案 0 :(得分:5)
有一项功能请求。随意添加您的投票,以帮助将来提供此选项: Retrieve the SQL Descriptions in Entity-Framework feature request
Huagati有一些很好的工具可以使用EF和L2S。其中一个功能是根据SQL数据库更新EF文档: Huagati website
从网站:从数据库更新ADO.NET实体数据模型文档从数据库中检索自由文本表和列描述以及索引定义,并使用描述更新EDMX设计器中的xml文档字段。
他们似乎在数据库中查找这些字段,然后直接更新模型XML。可能有人可以创建一个VS加载项,如果这是您想要的唯一功能,它将在没有价格的情况下执行相同操作。我将这个添加到我的“未来”项目列表中(虽然我似乎没有时间找到这些项目!)。
希望有所帮助!
答案 1 :(得分: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.WriteStoreSchema(...)用于输出XML之前查看是否可以修改EntityStoreSchemaGenerator.StoreItemCollection。
<强>更新强>
这很烦人。 System.Data.Metadata.Edm.Documentation是密封的,只有一个内部构造函数。感兴趣的两个属性也只能在内部设置。 所以这似乎是一种死路一条。
答案 2 :(得分:1)
我不知道设计师本身有任何可扩展性点。但是,一旦在edmx文件中填充了Summary和LongDescription字段,即使您从数据库进行其他更改或重新更新模型,这些值仍将保留在那里。除非您删除表并重新添加,否则这些值将保持填充状态。
所以你可以一次一个地复制和粘贴它们(模型中有多少个表?这比你想象的要快),或编写一个程序从数据库中提取信息(使用SQL SMO)或者某个程序),并让该程序编辑您的edmx文件,填充Summary和LongDescription字段(每次尝试程序时备份您的edmx - 您不想破坏您的edmx文件并且必须重新开始)
如果您有大型模型,并且您正在制作大量模型,那么自动编写程序是值得的。如果你只有几个模型,没有太多的表,请复制粘贴它。
您可能需要考虑向实体框架小组here提交反馈。似乎设计器应该自动从SQL Server中获取描述字段。会提出一个很好的功能请求。