使用实体框架模型插入数据

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

数据将被实际插入,

似乎花括号有所作为,我猜只有添加花括号,实体框架才会识别这是一个真实的具体数据。

【讨论】:

以上是关于使用实体框架模型插入数据的主要内容,如果未能解决你的问题,请参考以下文章

使用帖子插入一些数据但实体模型对象带有空值?

需要使用实体框架将大量记录插入数据库

使用实体框架将数据插入相关表中

将数据插入数据库时​​实体框架中的验证错误

使用自定义 ID 插入数据的 Code-First 实体框架

使用实体框架在代码优先迁移中有条件地插入数据