Как мне обновить значение внешнего ключа объекта с помощью LINQ to Entities?
-
05-07-2019 - |
Вопрос
Предположим, у меня есть эти таблицы:
Fruits
- FruitID INT PK
- FruitName NVARCHAR(30)
- FruitStatusID INT FK: Statuses
Statuses
- StatusID INT PK
- StatusName NVARCHAR(30)
Как мне обновить как название фрукта, так и его статус в базе данных в таких ситуациях?:
- Обновите фрагмент фрукта, полученный в результате предыдущего вызова L2E
- дано целое число, соответствующее FruitID (то есть у меня нет полного объекта Fruit в наличии для начала)
VB или C # подойдут, спасибо!
Решение
Это работает , но это не то, на что я надеялся:
int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey =
New EntityKey("MyEntities.Statuses", "StatusID", StatusID)
Конечно, есть более чистый способ сделать это, не требующий жесткого кодирования строк (который вводит исключения во время выполнения, если я сделаю опечатку).
Другие советы
Если объект Fruit передается другому методу, вы можете:
Передайте ссылку на контекстный объект вместе с плодом и вызовите SaveChanges()
Внесите свои правки в объект Fruit в методе downlevel и вызовите SaveChanges() в вызывающем методе (вы можете проверить, был ли он изменен, если хотите избежать ненужных вызовов базы данных.)
Код:
//Change the name
FruitEntities fe = new FruitEntities();
Fruit f = fe.Friuts.First();
f.FruitName = "NewName";
fe.SaveChanges();
//Get a fruit by ID and change the status
//Statuses will need to be included as an Entity in your model with an association to Fruits
int Id = 2;
int newStatusID = 0;
FruitEntities fe = new FruitEntities();
Fruit f = (from x in fe.Fruits
where x.FruitID == Id
select x).First();
Status s = (from y in fe.Statuses
where y.StatusID = newStatusID
select y).First();
f.Status = s;
fe.SaveChanges();
Не связан с StackOverflow