C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■85831 / 4階層)  LINQ to SQL:
□投稿者/ WebSurfer (1368回)-(2017/11/28(Tue) 14:36:01)
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();
            //}
        }
    }
}

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: LINQ to SQL: /ぬる →Re[5]: LINQ to SQL: /ぬる
 
上記関連ツリー

LINQ to SQL: / ぬる (17/11/24(Fri) 11:31) #85784
Re[1]: LINQ to SQL: / ぬる (17/11/24(Fri) 11:36) #85785
  ├ Re[2]: LINQ to SQL: / furu (17/11/24(Fri) 15:55) #85789
  │└ Re[3]: LINQ to SQL: / ぬる (17/11/24(Fri) 16:04) #85790
  ├ Re[2]: LINQ to SQL: / WebSurfer (17/11/25(Sat) 11:09) #85796
  │├ Re[3]: LINQ to SQL: / ぬる (17/11/28(Tue) 09:12) #85824
  ││└ Re[4]: LINQ to SQL: / furu (17/11/28(Tue) 09:38) #85825
  └ Re[2]: LINQ to SQL: / 魔界の仮面弁士 (17/11/28(Tue) 12:28) #85828
    │├ Re[4]: LINQ to SQL: / WebSurfer (17/11/28(Tue) 12:26) #85827
    │└ LINQ to SQL: / WebSurfer (17/11/28(Tue) 14:36) #85831 ←Now
    │  └ Re[5]: LINQ to SQL: / ぬる (17/11/30(Thu) 21:46) #85906
    │    └ Re[6]: LINQ to SQL: / WebSurfer (17/11/30(Thu) 22:01) #85908
    │      └ Re[7]: LINQ to SQL: / ぬる (17/11/30(Thu) 23:56) #85910
    │        └ Re[8]: LINQ to SQL: / WebSurfer (17/12/01(Fri) 00:17) #85911
    │          └ Re[9]: LINQ to SQL: / ぬる (17/12/01(Fri) 09:21) #85913
    │            ├ Re[10]: LINQ to SQL: / 魔界の仮面弁士 (17/12/01(Fri) 10:04) #85914
    │            └ Re[10]: LINQ to SQL: / WebSurfer (17/12/01(Fri) 11:35) #85916
    └ Re[3]: LINQ to SQL: / ぬる (17/11/30(Thu) 21:46) #85905
      └ Re[4]: LINQ to SQL: / ぬる (17/12/04(Mon) 13:46) #85936 解決済み
        └ Re[5]: LINQ to SQL: / WebSurfer (17/12/05(Tue) 13:12) #85952
          └ Re[6]: LINQ to SQL: / ぬる (17/12/06(Wed) 19:57) #85980

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信