Использование метаданных в linq-to-sql - PullRequest
1 голос
/ 16 марта 2010

я задавал этот вопрос Добавление дополнительных атрибутов в сущность LINQ to SQL

Теперь, когда я добавляю атрибут Browsable к сгенерированному объекту в конструкторе, он работает. Но когда я использую подход MetaDataType и добавляю атрибут Browsable в частичный класс, он не работает

«Я добавил класс MetaDataType и добавил свойство свойства для просмотра, но, похоже, не имеет никакого эффекта»

Ответы [ 2 ]

2 голосов
/ 16 марта 2010

Добавление MetadataTypeAttribute будет полезно только в том случае, если вы написали собственный код, который обнаруживает BrowsableAttribute. .NET Framework не обрабатывает MetadataTypeAttribute иначе, чем любой другой атрибут, и не объединяет ваш тип с типом метаданных.

Когда вы написали свой собственный код, который обнаруживает BrowsableAttribute, вы можете изменить его, чтобы он также обнаружил MetadataTypeAttribute для типа, и, если он существует, вы можете перейти к классу метаданных, на который ссылаются, для поиска свойств украшен BrowsableAttribute. Когда логика, использующая BrowsableAttribute, не была написана вами (например, это является частью .NET Framework, поскольку она используется дизайнером Visual Studio), нет способа заставить это работать.

В настоящее время есть только несколько частей .NET Framework, которые знают о MetadataTypeAttribute. Например, MVC использует его для проверки, а в .NET 4.0 DataAnnotations (который определяет атрибут) также есть валидатор. Enterprise Library 5.0 (в настоящее время находится в бета-версии) также обнаружит этот атрибут для проверки.

Хотя все больше приложений и часть инфраструктуры могут обрабатывать этот атрибут, в большинстве случаев его использование бесполезно.

0 голосов
/ 18 июня 2010

Я использую его, чтобы позволить своим классам 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; } 
}

Поскольку другой автор не включил исходный код, я подумал, что вы увидите, как он выглядит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...