2016-09-18 16 views
2

我对这两个都很新颖,所以如果答案很明显,我很抱歉,但我似乎无法找到任何答案。 SQL Server 2016对于表和单个列都有一个Description属性。 Entity Framework 6图表具有文档 - Long DescriptionDocumentation - Summary属性对于表和单个列。实体框架6从SQL Server 2016中导入表和列描述数据

我从数据库更新我的EF图。 EF6是否可以将SQL Server描述属性导入到EF6文档属性中的一个或另一个中?如果是这样,我会更改哪些设置?

感谢您的任何帮助。

+0

实体框架将通过数据提供者和你的情况的SqlClient连接到SQL服务器,我相信它会工作 – Monah

回答

0

首先从数据库使用代码反向poco模板,并将其配置为在摘要块中包含注释!

+0

谢谢,埃里克,但正如所说,我对此相当新鲜。我找到了EF Reverse POCO发电机,并且看到它能够包含评论。我认为我需要用EF Reverse POCO生成器生成的代码替换EF6当前生成的代码。作为一个新手,我不确定这是否会是一个简单的练习,例如。更改DBContext的名称,但生成的类的属性名称将保持不变,因此不需要做进一步的工作,或者是否会有很多改变。欣赏你的想法。 – GInSydney

+0

为什么不试试看? – ErikEJ

+0

我确实开始尝试它,但发现它在C#中生成文档,而我正在使用VB。我知道我可以在一个单独的C#项目中生成文档,并从VB项目中引用它们,但它听起来比我想要的要复杂一些。谢谢你的帮助。 – GInSydney

0

似乎Entity框架的问题是随SQL Server 2016一起提供的Always Encrypted功能。此问题将出现在Code First方法中。

在此基础上article

实体框架6并没有从一开始就设计与SQL Server的 始终加密功能,但是2016年的工作,很多的努力 已经进入制作功能工作尽可能透明地使用现有代码 。本文探讨了 需要解决的局限性以及潜在的问题,如果您需要使用基于实体框架6的应用程序 与包含加密列的数据库一起工作,您应该了解这些问题。

笔者在所有的设计方法,模型首先,代码首先提出了一个解决办法

建议

  • 如果你想与实体框架6.1.3使用的数据库,而无需你的代码可以工作或不工作的噩梦,你可以为你的数据库设置兼容模式为SQL Server 2014。
  • 确保您使用的是最后一个.NET framework,现在4.6.2,其中包含对Always EncryptedSqlClient的增强。

希望这将帮助你

+0

谢谢,哈迪,但我在SQL数据库中没有总是加密功能的情况下使用数据优先方法,所以我不确定这是否是恶意程序。 – GInSydney

+0

然后你可以很容易地进行反向工程(从工具 - >扩展和更新搜索 - >在网上搜索把'EntityFramework Reverse Poco Generator',并用它来检索你需要的所有类)。它会和你一起工作,因为正如我在你的问题的评论中提到的那样,实体框架使用ADO.NET连接到SQL服务器。 – Monah

0

我认为,这是目前不可能与EF,但你可以做这样的事情来检索Description属性:

column properties

SELECT value from fn_listextendedproperty( 
    'MS_Description', 
    'schema', 'dbo', 
    'table', 'Log', 
    'column', 'EventID') 

结果:

results

代码示例:

public static class DbHelpers 
{ 
    public static string GetColumnDocumentation(string tableName, string columnName, SqlConnection connection) 
    { 
     using (SqlCommand command = new SqlCommand(@"SELECT [value] 
                 FROM fn_listextendedproperty (
                 'MS_Description', 
                 'schema', 'dbo', 
                 'table', @TableName, 
                 'column', @columnName)", connection)) 
       { 

        command.Parameters.AddWithValue("TableName", tableName); 
        command.Parameters.AddWithValue("ColumnName", columnName); 

        return command.ExecuteScalar() as String; 
     } 
    } 
}