Как выставить часть Entity как DataContract?
До сих пор при работе с WCF я всегда выставлял целиком либо сгенерированные EF сущности, либо POCO (изменяя шаблон T4 для включения DataContract и DataMember для POCO и свойств) как DataContract.
Теперь я столкнулся с ситуацией, когда я не могу раскрыть все целиком, и мне нужно явно указать мой DataContract как подмножество сущностей.
Стоит сказать, что одна из моих сущностей выглядит примерно так:
И я хочу просто выставить Id, Name, CategoryId, Price.
Вставить / обновить остальные поля (ActiveFrom
, InactiveDate
, Supported
) - это то, что будет решаться на основе БР, и клиент ничего не знает и не должен знать о них.
Я пробовал следующие подходы, но каждый из них, кажется, имеет проблемы / не работает:
С помощьюAutoMapper : Мне нужно сопоставить исходный объект с объектом назначения, и этоодностороннее картированиетак что для целей презентации я могу отобразитьProduct
вProductContract
, Но для добавления / обновления продукта он не работает, так как он не может сделатьдвустороннее картирование.
Используйте отражение и создайте класс метаданных для сущностей и добавьте[DataMember]
приписать свойства класса метаданных, как показано ниже (обратите внимание, что я не включил ненужные поля):
public class ProductMD : AssociatedMetadataTypeTypeDescriptionProvider
{
public ProductMD() :
base(typeof(Product))
{
}
[DataMember]
public int Id{ get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int? CategoryID { get; set; }
[DataMember]
public decimal? Price { get; set; }
}
А затем использоватьProductMD
в качестве атрибута дляProduct
частичный класс, не касаясь автоматически сгенерированной сущности (к вашему сведению: я изменил генератор шаблонов POCO T4, чтобы включить[DataContract]
на каждого субъекта):
[MetadataType(typeof(ProductMD))]
public partial class Product
{
}
Но на стороне клиента у меня нет доступа ни к одному изDataMembers
продукта.
Теперь мой вопрос заключается в том, что является лучшим подходом для получения того, что я хочу сделать (выставляя подмножество сущностей какDataContract
)?