【问题标题】: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 探查器说什么?是否有任何东西被发送到数据库?

标签: c# .net entity-framework


【解决方案1】:

应该是:

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

【讨论】:

  • 我没有任何 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();
     }
    

    数据将被实际插入,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      相关资源
      最近更新 更多