Использование простого класса Entity для сопоставления с таблицей с использованием LINQ to SQL? - PullRequest
0 голосов
/ 11 февраля 2010

Предположим, я написал класс Customer, у которого есть такие атрибуты, как Имя, Возраст, Обозначение и т. Д. И у меня также есть таблица как клиент с такими же атрибутами.

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

Могу ли я сопоставить Customer.cs с таблицей customer, используя LINQ to SQL в качестве OR / M.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Вам будет трудно это сделать, потому что у вашего класса не будет всей внутренней сантехники, которой должен обладать класс L2S для управления связями FK, изменениями, вложениями в источник данных и т. Д.

OTOH, мы сделали то же самое. В нашем приложении L2S у нас есть то, что мы называем «сущностями приложения», которые являются нашими собственными сущностями (и намного более легкими), и у нас есть сгенерированные сущности L2S (со всеми внутренними соединениями L2S). В нашем бэкэнде объекты приложения отображаются на соответствующий объект L2S для манипулирования данными. У нас очень хорошо работает.

Randy

0 голосов
/ 11 февраля 2010

Да, это на самом деле. Вы можете предоставить файл сопоставления при создании экземпляра DataContext следующим образом:

var dataContext = new DataContext("connectionstring", entity.map);

Этот файл может быть автоматически сгенерирован с помощью SqlMetal.exe:

sqlmetal /server:servername /database:databasename /context:nameofdatacontext /Map:Entity.Map /code:Entity.code

Так что, если вы будете придерживаться соглашения о присвоении свойств одинаковым значениям в db и ities, вы будете в рабочем состоянии.

Кроме того, вы можете использовать шаблоны T4 для генерации вашего datacontext, также создав файл dbml.

Я создал файл .bat, который я запускаю из обозревателя решений с powershell.exe, который

  • запускает sqlmetal.exe с параметром карты
  • запускает sqlmetal.exe с параметром dbml
  • и запускает TextTransform.exe на моем шаблоне T4, который генерирует мой datacontex.

Но вам, вероятно, следует использовать EntitySet<T> и EntityRef<T> в вашей сущности, если вы не хотите, чтобы отсутствовали обычные функции, такие как lazyload. Это, очевидно, означает, что у вас не будет чистых POCO, но если вы можете с этим смириться, это довольно небольшой компромисс.

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