Entity Frameworkモデルを使用してデータベースにデータを挿入しようとしていますが、未知の理由により、何もしません。
ここに何かが足りませんか?
using (var context = new DatabaseEntities())
{
var t = new test
{
ID = Guid.NewGuid(),
name = "blah",
};
context.AddTotest(t);
context.SaveChanges();
}
そのはず:
context.TableName.AddObject(TableEntityInstance);
どこで:
TableName
:データベース内のテーブルの名前。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();
}
}
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();
やるべき
[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();
}
EF6を使用していますが、何かおかしいと感じました。
Customerにパラメーターを持つコンストラクターがあるとします。
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();
}
データは実際に挿入され、
カーリーブラケットが違いを生むようです。カーリーブラケットを追加した場合にのみ、エンティティフレームワークがこれが実際の具体的なデータであると認識します。