Entity Framework: установка свойства внешнего ключа - PullRequest
16 голосов
/ 26 января 2009

У нас есть таблица, которая выглядит примерно так:

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

Все ключи относятся к другим таблицам, но из-за способа распределения приложения нам проще передавать идентификаторы в качестве параметров. Итак, мы хотели бы сделать это:

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

Мы могли бы сделать это в LINQ-to-SQL, но не в EF?

Ответы [ 6 ]

16 голосов
/ 24 июня 2009

Эта недостающая особенность, похоже, раздражает многих людей.

  • Хорошие новости: MS решит проблему с .NET 4.0.
  • Плохие новости: сейчас, или если вы застряли на 3.5, вам нужно немного поработать, но это возможно.

Вы должны сделать это так:

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();
3 голосов
/ 14 октября 2009

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

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}
0 голосов
/ 20 марта 2014

Следуя ответу Дилана, Алекс Джеймс написал блог именно об этом, объясняя проблему полностью и как решить проблему частичного класса + свойство.

Поддельные иностранные ключи - EF3.5

0 голосов
/ 20 февраля 2010

другой метод, если вы не возражаете против "загрязнения" вашей схемы БД, это добавить вычисляемый столбец, например, если бы у вас было поле внешнего ключа FK_Customer, вы могли бы определить новый вычисляемый столбец FK_Customer_Computed, которое имеет выражение FK_Customer. Когда вы генерируете \ обновляете свою модель edmx, поле будет выглядеть как обычное поле, на которое вы затем сможете ссылаться из вашего объекта сущности.

Или дождитесь EF4:)

0 голосов
/ 18 февраля 2009

Использование EntityKey решает вашу проблему;)

алк.

0 голосов
/ 26 января 2009

Вы можете создать метод расширения, который создает сущность на основе этих идентификаторов.

...