Entity Framework 4.0, PoCo и свойства навигации для таблиц поиска - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть следующие модели

DeltaDirectionType,
int Id
string Name


Delta,
int Id 
string Name 
DeltaDirectionType DeltaDirectionType
Double Value

Trade
int Id
DateTime BusinessDate
IList<Delta> deltas

Итак, DeltaDirectionType - это справочная таблица, Trade содержит коллекцию Deltas

В базе данных это реализовано следующим образом

DeltaDirectionTypes
Id int
Name varchar(max)

Deltas
Id int
Name varchar(max)
DeltaDirectionType_Id int
Trade_Id int
Value float

Trades
Id int
BusinessDate DateTime
Delta_Id int

Когда я генерирую модель из кода для файла Edmx и (не проверяю внешние ключи), так как моя модель не имеет свойств для них. У меня проблема со свойствами навигации. Нечто подобное в nHibernate было бы простым сопоставлением для многих для DeltaDirectionType и Delta, и многим для многих для Delta и Trades, однако, как мне, во-первых, узнать, что DeltaDirectionType является поиском, и, во-вторых, заставить Icollection работать для я.

Я борюсь с этим, Entity Framework не облегчает вам задачу. Я попробовал обычное, удалите свойство навигации, которое EF вставляет для вас с одной стороны, но затем вы получаете некоторые ошибки фрагментов сопоставления, свойства не сопоставлены и т. Д.

Пожалуйста, помогите или укажите в правильном направлении.

Таблицы поиска - это реальные проблемы, не уверенные, почему в EF так сложно реализовать.

Любая помощь высоко ценится

Спасибо

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Для навигации по взаимосвязи необходимо создать внешние ключи или свойства навигации в модели.

Свойства навигации могут быть определены как односторонние, то есть от таблицы дельт до таблицы поиска.Подобная односторонняя навигация добавит соответствующее свойство к объекту дельты, но не к таблице looup

0 голосов
/ 15 февраля 2011

Что вы на самом деле подразумеваете под поиском? Вы разве что у Delta-сущности напрямую сопоставлены DeltaDirectionType_Name?

В EF вы получите свойство навигации для DeltaDirectionType и сможете получить доступ к имени через это свойство навигации. Если вам это не нравится, вы можете добавить новое свойство к частичному классу вашего сгенерированного POCO и предоставить имя непосредственно в сущности Delta, например:

public string DeltaDirectionTypeName
{
  get
  {
    return DeltaDirectionType != null? DeltaDirectionType.Name : String.Empty;
  }
}

Единственная проблема в том, что вы не можете использовать это свойство в запросах Linq-To-Entities. В запросах вы всегда должны использовать навигационные свойства.

...