Entity Framework 모델을 사용하여 데이터 삽입


89

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

6
코드 우선? 먼저 모델? 깨지거나 아무것도 저장하지 않습니까? SQL 프로필러는 무엇을 말합니까? 데이터베이스로 전송되는 것이 있습니까?
Dennis Traub

답변:


117

그것은해야한다:

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

@Dennis Traub가 모델에 대해 물었습니다. 그것에 대한 자세한 정보를 제공하십시오.
DmitryBoyko 2012 년

29
오히려 .AddObject 이상 사용 .Add
데일 프레이저

9
EF 6에서는 .AddObject 대신 .Add를 사용합니다
David

1
환상적인 대답! 엔티티 프레임 워크를 사용하여 읽고 쓰는 방법을 보여
주므로 감사합니다

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을 parikh

3

EF6를 사용하고 있는데 이상한 점을 발견했습니다.

Customer에 매개 변수가있는 생성자가 있다고 가정합니다.

내가 사용 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를 추가 할 때만 엔티티 프레임 워크가 이것이 실제 구체적인 데이터임을 인식 할 것이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.