Как мне обновить значение внешнего ключа объекта с помощью LINQ to Entities?

StackOverflow https://stackoverflow.com/questions/826537

Вопрос

Предположим, у меня есть эти таблицы:

Fruits
 - FruitID       INT PK
 - FruitName     NVARCHAR(30)
 - FruitStatusID INT FK: Statuses

Statuses
 - StatusID      INT PK
 - StatusName    NVARCHAR(30)

Как мне обновить как название фрукта, так и его статус в базе данных в таких ситуациях?:

  1. Обновите фрагмент фрукта, полученный в результате предыдущего вызова L2E
  2. дано целое число, соответствующее FruitID (то есть у меня нет полного объекта Fruit в наличии для начала)

VB или C # подойдут, спасибо!

Это было полезно?

Решение

Это работает , но это не то, на что я надеялся:

int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey = 
    New EntityKey("MyEntities.Statuses", "StatusID", StatusID)

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

Другие советы

Если объект Fruit передается другому методу, вы можете:

  1. Передайте ссылку на контекстный объект вместе с плодом и вызовите SaveChanges()

  2. Внесите свои правки в объект 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top