ADO.NET Entity Data Model: автоматически сгенерированные классы - PullRequest
0 голосов
/ 29 августа 2009

У меня есть структура таблицы, подобная следующей:

Companies           Addresses
*********           *********
ID                  ID
AddressID           ...
BillingAddressID    ...

AddressID и BillingAddressID являются внешними ключами, которые присутствуют в таблице адресов. Когда я генерирую свою модель на основе этой таблицы вместо того, чтобы получить то, что я ожидал бы получить (AddressID, BillingAddressID) в классе компании. Я получаю следующее:

public Addresses Addresses { .. }
public global::System.Data.Objects.DataClasses.EntityReference<Addresses> AddressesReference { .. }
public Addresses Addresses1 { .. }
public global::System.Data.Objects.DataClasses.EntityReference<Addresses> Addresses1Reference { .. }

Кажется, он заменяет BillingAddress на Addresses1 (не совсем уверен, почему это происходит). Кроме того, это кажется распространенным везде, где у меня есть внешний ключ, то есть вместо идентификатора я получаю Table, а затем TableReference.

Я думаю, что я могу видеть, что происходит, т.е. вместо того, чтобы давать мне один идентификатор, он будет искать и находить фактическую запись, к которой относится этот идентификатор. Однако я не совсем уверен, для чего предназначено поле TableReference ....

Может объяснить это немного лучше для меня?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 30 августа 2009

Отношения представлены в Entity Framework как объекты, так же, как и объекты. Даже если вы не собираетесь много работать непосредственно над ними, объектом отношений являются первоклассные граждане в EF. EF создает объекты ObjectStateEntry для отслеживания изменений в отношениях так же, как это делается для сущностей.

Вот почему есть две ссылки. Во-первых, AddressesReference является ссылкой на объект отношения, а не на конкретную сущность, а во-вторых, Addresses является действительной сущностью.

Питер Чан ( ссылка ) и Джулия Лерман в своей книге Programming Entity Framework, 1st Edition, утверждают, что понимание того, как работают отношения в EF, очень важно. Также они отмечают, что это первое, что смущает разработчиков, когда они начинают использовать EF.

0 голосов
/ 30 августа 2009

EF использует имена таблиц в качестве контрольной точки при построении модели, и поэтому вы видите «Адреса» и «Адреса1». Вы можете открыть модель сущностей в формате GUI и щелкнуть по каждой из ассоциаций. можно переименовать во что угодно, просто нажмите на ссылку, просмотрите отображение, убедитесь, что это тот, который сопоставляет «BillingAddressID» с «BillingAddressID» и переименуйте эту ссылку в «BillingAddress».

Обратите внимание, что текущая ссылка "Адреса" может быть привязкой к "BillingAddressID", поэтому вам нужно проверить обе ссылки.

Вероятно, было бы лучше изменить отображение для «AddressID» на «Address» вместо «Address», если это также сопоставление «один к одному».

0 голосов
/ 29 августа 2009

Внешние ключи заменяются ссылкой на сущность (коллекцию), на которую указывает внешний ключ.

Таким образом, чтобы добавить адрес компании, вы должны сделать что-то вроде:

Address a = new Address();
// ... set variables for address here

currentCompany.Addresses = a;
// or, the other way round (for collections)
a.Companies.Add(currentCompany);
...