2009-05-05 54 views
1

假設我有這些表:如何使用LINQ to Entities更新對象的外鍵值?

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

Statuses 
- StatusID  INT PK 
- StatusName NVARCHAR(30) 

如何更新兩個水果的名稱和它在數據庫中的這些情況?:

  1. 更新一片水果從以前來到地位L2E通話
  2. 給出對應FruitID(也就是,我沒有在手,全果對象下手)

VB整數或C#很好,謝謝!

回答

2

This works但不是我所希望的:

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

肯定有可以做到這一點並不需要硬編碼字符串(其中引入了運行時異常,如果我做一個乾淨的方式錯字)。

+1

我也意識到:你可以從現有的EntityKey值構建前兩個參數,所以你不必硬編碼它們:新的EntityKey(Fruit.FruitIDReference.EntityKey.EntityContainerName + 「。」+ Fruit.FruitIDReference.EntityKey.EntitySetName,Fruit.FruitIDReference.EntityKey.EntityKeyValues [0] .Key,0) – 2009-05-12 21:04:27

+0

我會試試看,謝謝你的跟進 – 2009-05-13 02:46:07

0

如果水果對象被傳遞到另一個方法,您可以:

  1. 與水果一起傳遞給上下文對象的引用,並調用的SaveChanges()

  2. 讓您編輯在下層方法水果對象,然後調用的SaveChanges()的調用方法(你可以檢查,看它是否已被修改,如果你想避免不必要的DB調用。)

郵編:

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