【问题标题】:Use of metadatatype in linq-to-sql在 linq-to-sql 中使用元数据类型
【发布时间】:2010-06-18 19:49:32
【问题描述】:

我问过这个问题 Adding more attributes to LINQ to SQL entity

现在,当我在设计器中为生成的实体添加 Browsable 属性时,它可以工作。但是,当我使用 MetaDataType 方法并在部分类中添加 Browsable 属性时,它不起作用

“我添加了一个 MetaDataType 类,并为属性添加了可浏览的属性,但似乎没有效果”

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    仅当您编写了检测BrowsableAttribute 的自定义代码时,添加MetadataTypeAttribute 才有用。 .NET 框架对MetadataTypeAttribute 的处理与任何其他属性没有任何不同,并且不会将您的类型与元数据类型“合并”。

    当您编写了自己的检测BrowsableAttribute 的代码后,您可以对其进行更改,因此它还会检测类型上的MetadataTypeAttribute,如果存在,您可以转到引用的元数据类中搜索属性用BrowsableAttribute 装饰。如果您没有编写使用 BrowsableAttribute 的逻辑(例如,这是 .NET 框架的一部分,因为它由 Visual Studio 设计人员使用),则无法使其工作。

    目前只有少数.NET 框架知道MetadataTypeAttribute。例如,MVC 使用它进行验证,而 .NET 4.0 DataAnnotations(定义属性)也有一个验证器。 Enterprise Library 5.0(目前处于测试阶段)也将检测此属性以进行验证。

    虽然越来越多的应用程序和部分框架可能能够处理此属性,但在大多数情况下使用它是无用的。

    【讨论】:

      【解决方案2】:

      我使用它是为了让我的 Linq-To-SQL 类也具有 Json 属性以简化 Json 对象的反序列化:

      using Newtonsoft.Json;
      using Newtonsoft.Json.Linq;
      using System.ComponentModel.DataAnnotations; 
      
      [MetadataType(typeof(User_JsonProperties))] 
      public partial class User 
      {} 
      
      public class User_JsonProperties
      
      { 
         [JsonProperty("user_id")] 
         public int UserId { get; set; } 
      }
      

      由于其他作者没有包含源代码,我想我会这样做,以便您看到它的样子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多