2012-01-25 3 views
0

Я разрабатываю объектную модель приложения, и существует определенный уровень сопротивления импеданса между объектами и таблицами. Например, у меня есть:Разработка домена с ORM

Product 
----------- 
ProductId, 
ProductTypeCode, 
StatusCode, 
SKUNumber 


ProductMarketAvailability 
-------------------------- 
ProductMarketAvailabilityId, 
ProductId, 
MarketId, 
Rank 

ProductDescription 
------------------ 
ProductDescriptionId, 
ProductId, 
MarketId, 
StatusId, 
DescriptionTypeId, 
Description 

(я не иллюстрировать таблицы поиска: состояние, DescriptionType, ProductType, рынок)


Я хочу иметь DOMAIN CLASS:

Product 
-------------- 
ProductId, 
SkuNumber, 
MarketId, 
MarketName, 
StatusCode, 
Status, 
Title , 
Description, 
Caption, 
Rank 

С LLblGen pro или Entity Framework:

- how i can map these tables my domain class? 
- Is it a best way to deal with this through Domain classes or better to 
    isolate domain classes from ORM generated classes 
    - If I manually map ORM classes data to my domain classes then when i 
    persisting my Domain classes (imagine they are POCO Self tracking), 
    how can i write managable , well crafted code ? 

i dont want to write , it doesnt look so right to me: 

    if (myProduct.TitleisDirty) 
    { 
     ProductDescription p= myRepository.GetDescriptionById 
     (myProduct.ProductDescriptionIdForTitle); 
     p.Description=myProduct.Title; 
     p.SubmitChanges(); 
    } 
    if (myProduct.RankisDirty) 
    { 
     ProductMarketAvailability pma= myRepository.GetMarketById 
     (myProduct.ProductMarketAvailabilityId); 
     pma.Rank=myProduct.Rank; 
     pma.SubmitChanges(); 
    } 

спасибо, что прочитал.

ответ

0

Я не думаю, что вы можете сопоставить эти таблицы с одним классом (по крайней мере, не в EF). Ваша модель передает отношение «один ко многим» между Продуктом и другими таблицами. Если они разделяют один и тот же первичный ключ (true 1: 1), вы можете сопоставить его с одним объектом.

Как для других вопросов:

  • ли это лучший способ справиться с этим через классы домена или лучше доменных классов изолят из ORM созданных классов?

Используйте классы из вашего ORM инструмент выбора, не начинайте вручную создать еще одну модель наверх ваших ORM-классов (если вы сделаете этот код-первых, они должны быть в любом случае POCO которые)

  • Если я вручную сопоставляю данные классов ORM с моими классами домена, то когда i , сохраняя мои классы домена (представьте, что они являются автосохранением POCO), как я могу писать управляемый, хорошо продуманный код?

Вы не можете

Я предполагаю, что это наследие приложение, и вы не можете прикоснуться к базе данных, так мое предложение сопоставить ваши таблицы на несколько классов, а затем выставить функциональные возможности запроса как обертки через класс Product. Пример: Product.MarketAvailability.Rank становится оболочкой на продукте: Product.Rank.

Смежные вопросы