2009-05-05 106 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();