У меня проблемы с установкой связи в структуре сущностей между двумя таблицами, где связь не содержит всех значений первичного ключа.
например. У меня есть две таблицы (это надуманный пример, но достаточно представить мою реальную базу данных, которую я не могу изменить)
------Items------ ---Orders----
----------------- -------------
* ItemId - * OrderId -
* EffectiveDate - - OrderDate -
- Name - - ItemId -
----------------- ------------- * denotes primary key field
В идеале я хотел бы, чтобы в Order было свойство, указывающее на элемент, действующий на OrderDate, но я мог бы жить с ассоциацией на Order с коллекцией Items, а затем создать свойство только для чтения в Order, которое выбрало правильный Item.
РЕДАКТИРОВАТЬ: база данных и модель будут только для чтения, поэтому решения только для чтения в порядке.
Возможно ли это в рамках сущности? (или даже LINQ to SQL?)
Я считаю, что это возможно с помощью NHibernate (кто-нибудь может подтвердить?), Но я продолжаю бить кирпичные стены структурой сущностей. Пока единственное решение, которое мне удалось решить, - это создать свойство в частичном классе для Order, которое использует « hack » для доступа к ObjectContext из заказа и запроса контекста. Коллекция элементов непосредственно как таковая
private IEnumerable<Item> Items
{
get
{
var ctx = this.GetContext();
return from i in ctx.Items where i.ItemId == this.ItemId select i;
}
}
public Item Item
{
get
{
return (from i in Items
where i.EffectiveDate <= this.OrderDate
orderby i.EffectiveDate ascending
select i).First();
}
}
Есть ли лучшее решение?