使用实体框架模型插入数据
Posted
技术标签:
【中文标题】使用实体框架模型插入数据【英文标题】:Insert data using Entity Framework model 【发布时间】:2012-02-08 18:18:41 【问题描述】:我正在尝试使用 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);' 代码优先?模型优先?它会破裂还是只是不存储任何东西? SQL 探查器说什么?是否有任何东西被发送到数据库? 【参考方案1】:应该是:
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();
【讨论】:
我没有任何 AddObject 方法。 @Dennis Traub 向您询问了您的模型。请提供更多信息。 使用 .Add 而不是 .AddObject 在 EF 6 上,您将使用 .Add 而不是 .AddObject 绝妙的答案!谢谢你,因为它展示了如何使用实体框架进行读写【参考方案2】: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();
应该这样做
【讨论】:
【参考方案3】:[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();
【讨论】:
如果有任何问题问我【参考方案4】:我在使用 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();
数据将被实际插入,
似乎花括号有所作为,我猜只有添加花括号,实体框架才会识别这是一个真实的具体数据。
【讨论】:
以上是关于使用实体框架模型插入数据的主要内容,如果未能解决你的问题,请参考以下文章