Linq2Sql настраиваемое отображение - PullRequest
1 голос
/ 28 марта 2012

Мой вопрос: существует ли способ с отображением DataContext / Table для реализации некоторого пользовательского кода отображения между базой данных и созданием экземпляра моего объекта?

В качестве простого примера скажем, что мой класс сущности Products имеет свойство "double Length {get; set;}"

и моя сущность и весь мой существующий код ожидают, что длина будет в футах, но в базе данных длина хранится в метрах, поэтому мне нужно выполнить преобразование. Есть ли способ зарегистрировать обратный вызов или иным образом вставить некоторый код для установки объекта. Длина вручную основана на DataRow или, тем не менее, данные извлекаются изнутри L2S?

Да, я думал, что смогу установить «double LengthInMeters {set {Length = value * 0.3048;}}», но я надеялся избежать создания дублирующих свойств и внесения двусмысленности в отношении использования. Что я хотел бы сделать, так это зарегистрировать закрытие в моем DataContext для вызова после создания Продукта, чтобы я мог сказать:

DataContext.Entity<Product>().OnCreated( (p, row) => 
{ 
  p.Length = row["Length"] * 0.3048; 
  p.ProductCode = row["Sku"].ToString().Substring(1, 5);
 ...etc..
});

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Вы можете сделать это при создании поста. класс .designer.cs содержит метод расширяемости OnCreated () для ваших моделей. Вы можете положить его там. Я бы не стал этого делать. Здесь скрывается важная логика. Поместите этот код в свой репозиторий или какую-то похожую абстракцию Лично я, вероятно, получу модель, а затем перенесу данные в конкретную модель приложения, прежде чем вернуть ее из хранилища. Затем я бы преобразовал его обратно при возврате в хранилище. Не очень быстро, но бизнес-приложения обычно не требуют миллисекундных скоростей, где я работаю ... ремонтопригодность имеет первостепенное значение.

1 голос
/ 28 марта 2012

Вместо того, чтобы делать событие после создания, я бы посоветовал вам просто выполнить преобразование, когда вы создаете экземпляр своей сущности. Например:

var qry = from product in dc.Products
          where product == something
          select new Product()
          {
              Length = product.Length * 0.3048,
              // etc.
          };
var normalizedProduct = qry.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...