如何使用LINQ to Entities更新对象的外键值?

时间:2009-05-05 19:28:39

标签: .net-3.5 linq-to-entities foreign-keys crud

假设我有这些表:

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

Statuses
 - StatusID      INT PK
 - StatusName    NVARCHAR(30)

在这些情况下,如何更新Fruit的名称及其在数据库中的状态?:

  1. 更新来自之前的L2E电话的一段水果
  2. 给出一个对应于FruitID的整数(也就是说,我手头没有完整的Fruit对象)
  3. VB或C#很好,谢谢!

2 个答案:

答案 0 :(得分:2)

This works但不是我所希望的:

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

当然,有一种更简洁的方法可以做到这一点,不需要硬编码字符串(如果我输入错字,会引入运行时异常)。

答案 1 :(得分:0)

如果将Fruit对象传递给另一个方法,您可以:

  1. 传递对上下文对象的引用以及Fruit并调用SaveChanges()

  2. 在下层方法中对Fruit对象进行编辑,并在调用方法中调用SaveChanges()(如果要避免不必要的DB调用,可以检查它是否已被修改。)

  3. 代码:

    //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();