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


88

我试图使用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);”
Willem 2012年

5
代码优先?模特第一?它会损坏还是不存储任何东西?SQL Profiler说什么?是否有任何东西要发送到数据库?
丹尼斯·特劳布

Answers:


115

它应该是:

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

1
我没有任何AddObject方法。
罗奇(Rocshy)2012年

@Dennis Traub向您询问了您的模型。请提供有关它的更多信息。
开发人员

29
使用.Add而不是.AddObject
Dale Fraser

9
在EF 6上,您将使用.Add而不是.AddObject-
大卫

1
很棒的答案!感谢这一点,因为它显示了如何使用实体框架进行读写
Stephen Pefanis,

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

应该做


7

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

如有查询问我
SANKET帕瑞克

3

我正在使用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();
 }

然后将实际插入数据,

似乎Curly Brackets有所作为,我猜想只有当添加Curly Brackets时,实体框架才会认识到这是一个真实的具体数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.