在MS-SQL
中設計表格時,您可以選擇爲添加到表格的每個列添加description
。 EF Code First
在Data Annotations
的幫助下可以做到嗎?在EF代碼中首先是否存在描述字段的數據註釋?
回答
您使用我的soultion請閱讀一點點前:
擴展屬性:
https://technet.microsoft.com/en-us/library/ms190243(v=sql.105).aspx
屬性:
http://www.dotnetperls.com/attribute
我的解決方案將允許你爲任何類似的財產做一個陰影描述:
[Description("My Column description!")]
public string RegionCity { get; set; }
注:
- 複製粘貼soultion,一切都應該作品(donnot忘記在app.config連接字符串)!
- 您可以使用sql命令IF NOT EXISTS來檢查擴展屬性是否已經存在。
您可以構建自己的通用邏輯或C#擴展來讀取任何屬性的descirption,這應該很容易只是添加了一個字符串示例。
using System; using System.Linq; namespace EntityFrameworkDemo { using System.Data.Entity; public class Program { public static void Main() { Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>()); using (var myDbContext = new MyDbContext("DefaultConnection")) { // Maybe you do not need this line! myDbContext.Database.Initialize(true); // Adding one time or use the IF NOT EXISTS SQL Command! var c = new ColumnsDescription(); c.AddColumnsDescriptions(myDbContext); var region = new Region { RegionCity = "Test 1", RegionSeconcdCity = "Test2" }; myDbContext.Regions.Add(region); myDbContext.SaveChanges(); } // Reading the extended properties using (var myDbContext = new MyDbContext("DefaultConnection")) { var ep = "select value from fn_listextendedproperty('MS_Description','schema','dbo','table', 'Regions', 'column', 'RegionCity');"; // For example you can read your extend property like following or you make a generic reader var properties = myDbContext.Database.SqlQuery<string>(ep).First(); Console.WriteLine(properties); } } [AttributeUsage(AttributeTargets.Property)] public class DescriptionAttribute : Attribute { string value; public DescriptionAttribute(string id) { this.value = id; } public string Value { get { return this.value; } } } public class ColumnsDescription { public void AddColumnsDescriptions(DbContext mydbContext) { // Fetch all the DbContext class public properties which contains your attributes var dbContextProperies = typeof(DbContext).GetProperties().Select(pi => pi.Name).ToList(); // Loop each DbSets of type T foreach (var item in typeof(MyDbContext).GetProperties() .Where(p => dbContextProperies.IndexOf(p.Name) < 0) .Select(p => p)) { if (!item.PropertyType.GetGenericArguments().Any()) { continue; } // Fetch the type of "T" var entityModelType = item.PropertyType.GetGenericArguments()[0]; var descriptionInfos = from prop in entityModelType.GetProperties() where prop.GetCustomAttributes(typeof(DescriptionAttribute), true).Any() select new { ColumnName = prop.Name, Attributes = prop.CustomAttributes }; foreach (var descriptionInfo in descriptionInfos) { // Sql to create the description column and adding var addDiscriptionColumnSql = @"sp_addextendedproperty @name = N'MS_Description', @value = '" + descriptionInfo.Attributes.First().ConstructorArguments.First() + @"', @level0type = N'Schema', @level0name = dbo, @level1type = N'Table', @level1name = " + entityModelType.Name + "s" + ", @level2type = N'Column', @level2name =" + descriptionInfo.ColumnName; var sqlCommandResult = mydbContext.Database.ExecuteSqlCommand(addDiscriptionColumnSql); } } } } public class Region { public int Id { get; set; } [Description("My Column description!")] public string RegionCity { get; set; } [Description("My Second Column description!")] public string RegionSeconcdCity { get; set; } } public class MyDbContext : DbContext { public DbSet<Region> Regions { get; set; } public MyDbContext(string connectionString) : base("name=" + connectionString) { } } } }
感謝您的解決方案。但這對我的需求來說有點複雜。無法理解。希望只有一個用於實體類的「屬性」,它將描述添加到數據庫中。 –
@afsharm此屬性在EF中不存在,您必須通過自己創建它。有一個神奇的線看這些devleopers,他們有同樣的問題,已經解決了遷移,這是比我的靈魂複雜很多http://stackoverflow.com/questions/10080601/how-to -add-description-to-columns-in-entity-framework-4-3-code-first-using-migra –
@afsharm如果您需要更多的說明,我會很樂意爲您提供幫助! –
- 1. 在EF代碼首先
- 2. EF代碼 - 首先創建一些字段,即使我添加了ForeignKey註釋
- 3. EF 5中的數據註釋無代碼優先
- 4. 首先在EF代碼中枚舉
- 5. EF實體類中的CF代碼首先計算字段
- 6. 如何創建/更新EF代碼中的LastModified字段首先
- 7. EF代碼首先創建
- 8. EF代碼首先與Distinct()
- 9. 一個在EF代碼首先
- 10. 異常在EF使用代碼首先
- 11. 組合鍵在EF 4.2代碼首先
- 12. 在EF代碼更新收藏首先
- 13. EF代碼優先模型是否旨在完整地描述數據庫的結構?
- 14. 如何在ASP.NET MVC應用程序中首先使用EF代碼檢查SQL表中是否存在數據?
- 15. 此代碼是否描述了C#中的存在類型?
- 16. Ef中的代碼首先映射
- 17. EF代碼首先,數據庫在哪裏指定?
- 18. 代碼首先在EF不創建數據庫
- 19. EF代碼首先不懶加載只是後數據導入
- 20. 「Key」數據註釋在數據庫中首先做了什麼?
- 21. 如何添加不是註釋的代碼描述?
- 22. 在EF代碼中的靜態構造函數首先使用
- 23. DataForm,DropBox和數據註釋(描述等)
- 24. EF代碼中的靜態對象和種子數據 - 首先
- 25. EF代碼首先忽略屬性到字段慣例?
- 26. EF 6.1.2數據庫首先查看代
- 27. 實體框架,代碼優先,設置數據庫字段描述
- 28. EF代碼首先到SQL Server的Mysql
- 29. 首先插入多行的EF代碼
- 30. UnitOfWork和GenericRepository模式是否冗餘首先在EF 4.1代碼中?
你需要像[說明(「這裏是財產詳細描述」)]公衆詮釋PROPNAME {獲取;集;}將在Db的創建EF列額外的無形? –
@BassamAlugili:數據註解是這樣的,但這是否會在db中生成描述? –