Entity Framework (4) Вопрос отношения внешнего ключа - PullRequest
1 голос
/ 25 марта 2011

Допустим, у меня есть:

Объект имени пользователя с Int64 в качестве идентификатора и несколькими другими полями.

Сущность сообщения с Int64 в качестве идентификатора и несколькими другими полями, связанными с сущностью имени пользователя через имя пользователя 1, может иметь отношение от 0 до многих сообщений.

У меня есть два репозитория (основные, добавить, удалить, сохранить методы) для имен пользователей и сущностей сообщений.

Но я хочу связать сущность сообщения, которую я генерирую в коде (новое сообщение () и т. Д.), С именем пользователя, как бы я сделал это с хранилищем и между двумя различными объектными контекстами?

Я заработал, не используя репозиторий:

usernameEntity.Messages.Add(msg);

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

Ответы [ 4 ]

2 голосов
/ 25 марта 2011

Вы просто позвоните:

var user = repository.GetUserById(id);
user.Messages.Add(new Message(...));
Save(); // I don't know how do you save changes.

Ваши репозитории должны совместно использовать один контекст для одной единицы работы (бизнес-транзакции).У вас должен быть какой-то метод (Save, Commit или любой другой), который будет сохранять изменения, сделанные на объектах, загруженных из всех репозиториев.Обычно это выполняется отдельным классом, реализующим шаблон единицы работы, который оборачивает контекст и используется совместно с хранилищами.Сохранение изменений вызывается на единицу работы вместо репозитория.Существует множество вопросов, связанных с этой проблемой.

В случае реального отношения внешнего ключа, смоделированного в EFv4, вы также можете просто использовать:

var message = new Message(...);
message.UserId = id; // Foreign key property exposed on Message entity
repository.Insert(message);
Save();
1 голос
/ 25 марта 2011

Я использую шаблон хранилища поверх того же контекста сущности , чтобы вы могли легко обмениваться объектами между хранилищами.

1 голос
/ 25 марта 2011

Вам нужна единица работы, которая охватывает несколько хранилищ и отвечает за внесение изменений в базу данных.

0 голосов
/ 25 марта 2011

Если это отношение один-ко-многим, то у вашей сущности сообщения должен быть идентификатор пользователя. Вы можете использовать идентификатор пользователя для поиска объекта пользователя в вашем репозитории объектов сообщений ObjectContext и добавить сообщение пользователю, а затем сохранить свои изменения.

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