Chèn dữ liệu bằng mô hình Entity Framework


88

Tôi đang cố gắng chèn một số dữ liệu vào cơ sở dữ liệu của mình bằng mô hình Entity Framework, nhưng vì một số lý do không xác định đối với tôi, nó không có tác dụng gì.

Am i thiếu cái gì ở đây?

using (var context = new DatabaseEntities())
{
    var t = new test
    {
        ID = Guid.NewGuid(),
        name = "blah",
    };
    context.AddTotest(t);
    context.SaveChanges();
}

Hãy thử 'SaveChanges (System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);'
Willem

5
Mã đầu tiên? Mô hình đầu tiên? Nó có bị vỡ hay nó chỉ không lưu trữ bất cứ thứ gì? SQL Profiler nói gì? Có gì được gửi đến cơ sở dữ liệu không?
Dennis Traub

Câu trả lời:


115

Nó phải là:

context.TableName.AddObject(TableEntityInstance);

Ở đâu:

  1. TableName: tên của bảng trong cơ sở dữ liệu.
  2. TableEntityInstance: một thể hiện của lớp thực thể bảng.

Nếu bảng của bạn là Orders, thì:

Order order = new Order();
context.Orders.AddObject(order);

Ví dụ:

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

Đây là một ví dụ trực tiếp:

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
Tôi không có bất kỳ phương thức AddObject nào.
Rocshy

@Dennis Traub đã hỏi bạn về Mô hình của bạn. Vui lòng cung cấp thêm thông tin về nó.
Nhà phát triển

28
Sử dụng .Add hơn .AddObject
Dale Fraser

9
Trên EF 6, bạn sẽ sử dụng .Add thay vì .AddObject
David

1
Câu trả lời tuyệt vời! cảm ơn vì điều này cho thấy cách đọc và viết bằng khung thực thể
Stephen Pefanis

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

Hãy làm nó


7

[HttpPost] // nó sử dụng khi bạn viết logic trên sự kiện nhấp vào nút

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

nếu bất kỳ truy vấn hỏi tôi
Sanket Parikh

3

Tôi đang sử dụng EF6 và tôi thấy có điều gì đó kỳ lạ,

Giả sử Khách hàng có hàm tạo với tham số,

nếu tôi sử dụng new Customer(id, "name"), và làm

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name") );
    db.SaveChanges();
 }

Nó chạy qua mà không có lỗi, nhưng khi tôi xem xét DataBase, tôi thấy trên thực tế là dữ liệu KHÔNG được chèn,

Nhưng nếu tôi thêm dấu ngoặc nhọn, hãy sử dụng new Customer(id, "name"){}và làm

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name"){} );
    db.SaveChanges();
 }

dữ liệu sau đó sẽ thực sự ĐƯỢC Chèn,

Có vẻ như Dấu ngoặc nhọn tạo ra sự khác biệt, tôi đoán rằng chỉ khi thêm Dấu ngoặc nhọn, khung thực thể mới nhận ra đây là một dữ liệu cụ thể thực sự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.