Нужно ли делать запрос на выборку, чтобы создать связь в Entity Framework? - PullRequest
0 голосов
/ 14 января 2009

Я хочу создать объект блога, который имеет отношение между пользователем. Чтобы создать связь, нужно ли сначала выбрать сущность Пользователь, а затем установить для нее свойство Пользователь объекта Блог? В образцах Entity Framework предлагается установить для объекта User значение ViewState и получить его, когда вам нужно создать связь, например, в базовом кэше.

Это необходимо? Есть ли другой способ сделать это? (как в linq-to-sql установка внешних ключей только без выбора.)

Вот мой пример кода;

Blog blog = new Blog
            {
                Name = blogName,
                Slogan = slogan,
                User = Entities.Users.First(u => u.Id == userId)
            }

Entities.AddToBlogs(blog);
Entities.SaveChanges();

Редактировать (Чтобы дать еще один шанс на вопрос): Есть что-то неясное или еще что-то?

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Мы используем следующее решение для установки внешних ключей без извлечения соответствующей сущности из контекста.

Blog blog = new Blog            
{                
   Name = blogName,                
   Slogan = slogan,                
   UsersReference.EntityKey = new EntityKey("EntityModel.Users", "UserId", userId)            
}

Entities.AddToBlogs(blog);
Entities.SaveChanges();
0 голосов
/ 14 января 2009

Это официально не поддерживается в настоящее время, , но может быть включено в будущую версию .

Однако вы можете взломать его. Я не пробовал это, но идея кажется концептуально обоснованной:

  1. Создайте нового пользователя и установите соответствующий идентификатор. Присоедините его к контексту объекта.
  2. Скажите контексту объекта забыть обо всех изменениях, которые вы сделали до сих пор.
  3. Теперь создайте новый блог и задайте для свойства User только что созданного пользователя.
  4. Сохранить изменения в контексте объекта.

Очевидно, что это плохо сработает, если пользователь фактически не существует в базе данных.

Казалось бы, хорошая идея, но, похоже, не работает. (

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