Entity Frameworkモデルを使用してデータを挿入する


88

Entity Frameworkモデルを使用してデータベースにデータを挿入しようとしていますが、不明な理由により、何も実行されません。

ここで何か不足していますか?

using (var context = new DatabaseEntities())
{
    var t = new test
    {
        ID = Guid.NewGuid(),
        name = "blah",
    };
    context.AddTotest(t);
    context.SaveChanges();
}

'SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);'を試してください
Willem

5
コードファースト?モデルファースト?壊れたり、何も保存していませんか?SQLプロファイラーは何と言っていますか?データベースに送信されるものはありますか?
Dennis Traub、2012年

回答:


115

そのはず:

context.TableName.AddObject(TableEntityInstance);

どこ:

  1. TableName:データベース内のテーブルの名前。
  2. TableEntityInstance:テーブルエンティティクラスのインスタンス。

テーブルがの場合Orders

Order order = new Order();
context.Orders.AddObject(order);

例えば:

 var id = Guid.NewGuid();

 // insert
 using (var db = new EfContext("name=EfSample"))
 {
    var customers = db.Set<Customer>();
    customers.Add( new Customer { CustomerId = id, Name = "John Doe" } );

    db.SaveChanges();
 }

これがライブの例です:

public void UpdatePlayerScreen(byte[] imageBytes, string installationKey)
{
  var player = (from p in this.ObjectContext.Players where p.InstallationKey == installationKey select p).FirstOrDefault();

  var current = (from d in this.ObjectContext.Screenshots where d.PlayerID == player.ID select d).FirstOrDefault();

  if (current != null)
  {
    current.Screen = imageBytes;
    current.Refreshed = DateTime.Now;

    this.ObjectContext.SaveChanges();
  }
  else
  {
    Screenshot screenshot = new Screenshot();

    screenshot.ID = Guid.NewGuid();
    screenshot.Interval = 1000;
    screenshot.IsTurnedOn = true;
    screenshot.PlayerID = player.ID;
    screenshot.Refreshed = DateTime.Now;
    screenshot.Screen = imageBytes;

    this.ObjectContext.Screenshots.AddObject(screenshot);
    this.ObjectContext.SaveChanges();
  }
}

1
AddObjectメソッドはありません。
Rocshy

@Dennis Traubがモデルについて質問しました。それについてより多くの情報を提供してください。
開発者

29
.AddObjectではなく.Addを使用する
Dale Fraser

9
EF 6では、.AddObjectではなく.Addを使用します
David

1
素晴らしい答え!エンティティフレームワークを使用して読み書きする方法を示しているので、これに感謝します
Stephen Pefanis

41
var context = new DatabaseEntities();

var t = new test //Make sure you have a table called test in DB
{
    ID = Guid.NewGuid(),
    name = "blah",
};

context.test.Add(t);
context.SaveChanges();

それをすべき


7

[HttpPost] //ボタンクリックイベントでロジックを記述するときに使用

public ActionResult DemoInsert(EmployeeModel emp)
{
    Employee emptbl = new Employee();    // make object of table
    emptbl.EmpName = emp.EmpName;
    emptbl.EmpAddress = emp.EmpAddress;  // add if any field you want insert
    dbc.Employees.Add(emptbl);           // pass the table object 
    dbc.SaveChanges();

    return View();
}

質問がある場合
sanket parikh

3

EF6を使用していますが、何か奇妙なものを見つけました。

顧客がパラメータを持つコンストラクタを持っていると仮定します、

私が使用している場合 new Customer(id, "name")、および行います

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name") );
    db.SaveChanges();
 }

エラーなしで実行されましたが、データベースを調べたところ、実際にはデータが挿入されていないことがわかりました。

しかし、中かっこを追加する場合は、使用してnew Customer(id, "name"){}行います

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name"){} );
    db.SaveChanges();
 }

データは実際に挿入され、

カーリーブラケットが違いを生むようです。カーリーブラケットを追加した場合にのみ、エンティティフレームワークはこれが実際の具体的なデータであることを認識すると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.