2012-01-12 32 views
54

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

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

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

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

+5

コードファースト?最初のモデルですか?それは壊れているのですか、それとも何も保存していませんか? SQLプロファイラは何を言いますか?データベースに何かが送信されていますか? –

答えて

69

それは次のようになります。

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(); 
    } 
} 
+0

私はAddObjectメソッドを持っていません。 – Rocshy

+0

@Dennis Traubがあなたのモデルについて聞いた。それについての詳細情報を提供してください。 –

+0

壊れません。それは何も格納されていません。私は自分のテーブルの内容をリストアップするのに何の問題もありません。申し訳ありませんが、これは初めてですが、SQLプロファイラを使用していません。私のモデルは2列のテーブルを1つしか持たない。 – Rocshy

23
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(); 

翔ULDは

+0

パーフェクト、ありがとう! – taiar

4

[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(); 
} 
+0

質問があれば –

2

にロジックを書くとき、私はEF6を使用している、と私は奇妙な何かを見つける使用し、

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

私はnew Customer(id, "name")を使用し、行う場合

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

I

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

トンは、エラーなして実行されますが、私はデータベースに見たとき、私は、データが挿入されていないという事実に見つけ、

をしかし、私は中括弧を追加した場合、new Customer(id, "name"){}を使用して行いますデータは実際に挿入されます、

は、カーリーブラケットは、これが実際の具体的なデータであると認識するカーリーブラケットを追加するときに違いがあると思う、私は推測する。

関連する問題