|
■No85824 (ぬる さん) に返信
想像するばかりでは何なので No85827 で書いたことが正しいかどうか実際にコードを
書いて検証してみました。
DataContext にアタッチされたエンティティの状態を調べる方法が分からなかったので、それは調べ
ていませんが、 No85827 で書いた、
(a) 上記 (5) で InsertOnSubmit に代えて ExecuteCommand("insert ...") を使う、or
(b) furu さんの言われるようにコンテキストにアタッチされるエンティティを最新のものにしてから
db.Student.InsertOnSubmit ⇒ db.SubmitChanges を行う。
・・・で期待通りの結果になることは確認できました。なので、No85827 で書いた想像は当たっている
のではないかと思います。
ちなみに検証に使ったコードは以下の通りです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleAppLinqToSQL
{
class Program
{
static void Main(string[] args)
{
using (var db = new DataClasses1DataContext())
{
var query = from item in db.Table
select item;
foreach (Table table in query)
{
Console.WriteLine("Id={0}, Name={1}, Price={2}", table.Id, table.Name, table.Price);
}
db.Table.InsertOnSubmit(new Table() { Id = 15, Name = "ABCDEF", Price = 100 });
db.SubmitChanges();
db.ExecuteCommand("delete from [Table] where Id = 15");
// 以下のコードは意味なし ⇒ コメントアウト
//db.SubmitChanges();
// これは SubmitChanges でエラー
//db.Table.InsertOnSubmit(new Table() { Id = 15, Name = "ACB", Price = 100 });
//db.SubmitChanges();
// これは OK
db.ExecuteCommand("insert into [Table] (Id,Name,Price) values (15,'newABC',200)");
}
// 上の db.ExecuteCommand("insert ..."); に代えて以下のようにしても OK
//using (var db = new DataClasses1DataContext())
//{
// db.Table.InsertOnSubmit(new Table() { Id = 15, Name = "newABC", Price = 200 });
// db.SubmitChanges();
//}
}
}
}
|