LINQ挿入後に 'id'フィールドを返すことはできますか?


182

Linq-to-SQLを使用してDBにオブジェクトを入力すると、別のdb呼び出しを行わずに、挿入したばかりのIDを取得できますか?これはかなり簡単だと思いますが、方法がわかりません。

回答:


266

オブジェクトをdbにコミットした後、オブジェクトはIDフィールドの値を受け取ります。

そう:

myObject.Field1 = "value";

// Db is the datacontext
db.MyObjects.InsertOnSubmit(myObject);
db.SubmitChanges();

// You can retrieve the id from the object
int id = myObject.ID;

2
これを機能させるには、フィールドを「データベース生成」および「挿入時に更新」に設定する必要があるかもしれません。
サム

1
C#4.0でこれを行うにはどうすればよいですか?insertonsubmitまたはsubmitchangesはありませんか?
Bat_Programmer 2012

1
@Confused Programmer-同じですが、Context.Collection.Add()とSaveChanges()を使用しています
naspinski

動作はDB固有である可能性があります。SQLiteを使用すると、IDが入力されませんでした。
デンバー

これを以前に使用したことがありますが、これをマルチリレーションシップテーブルで機能させるにはどうすればよいですか?メインテーブルを保存して最初に両方からIDを取得してから、両方のIDをリレーションシップテーブルに保存する必要がありますか?
Cyber​​Ninja

15

生成されたIDを挿入すると、保存されるオブジェクトのインスタンスに保存されます(以下を参照):

protected void btnInsertProductCategory_Click(object sender, EventArgs e)
{
  ProductCategory productCategory = new ProductCategory();
  productCategory.Name = Sample Category”;
  productCategory.ModifiedDate = DateTime.Now;
  productCategory.rowguid = Guid.NewGuid();
  int id = InsertProductCategory(productCategory);
  lblResult.Text = id.ToString();
}

//Insert a new product category and return the generated ID (identity value)
private int InsertProductCategory(ProductCategory productCategory)
{
  ctx.ProductCategories.InsertOnSubmit(productCategory);
  ctx.SubmitChanges();
  return productCategory.ProductCategoryID;
}

参照:http : //blog.jemm.net/articles/databases/how-to-common-data-patterns-with-linq-to-sql/#4


2

これを試して:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.