【发布时间】:2010-06-18 19:49:32
【问题描述】:
我问过这个问题 Adding more attributes to LINQ to SQL entity
现在,当我在设计器中为生成的实体添加 Browsable 属性时,它可以工作。但是,当我使用 MetaDataType 方法并在部分类中添加 Browsable 属性时,它不起作用
“我添加了一个 MetaDataType 类,并为属性添加了可浏览的属性,但似乎没有效果”
【问题讨论】:
标签: linq-to-sql
我问过这个问题 Adding more attributes to LINQ to SQL entity
现在,当我在设计器中为生成的实体添加 Browsable 属性时,它可以工作。但是,当我使用 MetaDataType 方法并在部分类中添加 Browsable 属性时,它不起作用
“我添加了一个 MetaDataType 类,并为属性添加了可浏览的属性,但似乎没有效果”
【问题讨论】:
标签: linq-to-sql
仅当您编写了检测BrowsableAttribute 的自定义代码时,添加MetadataTypeAttribute 才有用。 .NET 框架对MetadataTypeAttribute 的处理与任何其他属性没有任何不同,并且不会将您的类型与元数据类型“合并”。
当您编写了自己的检测BrowsableAttribute 的代码后,您可以对其进行更改,因此它还会检测类型上的MetadataTypeAttribute,如果存在,您可以转到引用的元数据类中搜索属性用BrowsableAttribute 装饰。如果您没有编写使用 BrowsableAttribute 的逻辑(例如,这是 .NET 框架的一部分,因为它由 Visual Studio 设计人员使用),则无法使其工作。
目前只有少数.NET 框架知道MetadataTypeAttribute。例如,MVC 使用它进行验证,而 .NET 4.0 DataAnnotations(定义属性)也有一个验证器。 Enterprise Library 5.0(目前处于测试阶段)也将检测此属性以进行验证。
虽然越来越多的应用程序和部分框架可能能够处理此属性,但在大多数情况下使用它是无用的。
【讨论】:
我使用它是为了让我的 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; }
}
由于其他作者没有包含源代码,我想我会这样做,以便您看到它的样子。
【讨论】: