[C#] 엔터티 프레임 워크에서 삽입 된 엔터티 ID를 얻으려면 어떻게해야합니까? [닫은]

Asp.net의 Entity Framework에 문제가 있습니다. 데이터베이스에 객체를 추가 할 때마다 ID 값을 얻고 싶습니다. 어떻게해야합니까?



답변

꽤 쉽습니다. 당신이 사용하는 경우 DB는 (같은 ID를 생성 IDENTITY당신은 단지에 개체를 추가 할 필요가 MS SQL 인치) ObjectSetSaveChanges관련에ObjectContext . Id자동으로 채워집니다 :

using (var context = new MyContext())
{
  context.MyEntities.Add(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

기본적으로 엔티티 프레임 워크는 자동 생성 이 사용될 때 각각 INSERT을 따릅니다 .SELECT SCOPE_IDENTITY()Id


답변

나는 Ladislav Mrnka의 대답을 사용하고 있었다 내가 있었다 때문에 내가 여기에 게시하고 그러나 엔티티 프레임 워크를 사용하는 경우 ID를 검색 성공적으로 미스 – 사용 (즉이 필요하지 않은 그것을 사용)을하고 난 인 – 여기 내 결과를 게시 줄 알았는데 사람들은 내가 가진 문제를 “해결”하려고합니다.

고객과 외래 키 관계가있는 주문 오브젝트를 고려하십시오. 새로운 고객과 새로운 주문을 동시에 추가했을 때 이와 같은 일을하고있었습니다.

var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id

그러나 내 경우에는 customer.Id와 order.CustomerId 사이에 외래 키 관계가 있기 때문에 필요하지 않았습니다.

내가해야 할 일은 이것뿐입니다.

var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer};
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order

이제 변경 사항을 저장하면 고객에 대해 생성 된 ID도 주문에 추가됩니다. 추가 단계가 필요 없습니다

나는 이것이 원래의 질문에 답하지는 않는다는 것을 알고 있지만 EF를 처음 접하는 개발자는 필요하지 않은 것에 대해 최고 투표 답변을 과도하게 사용하는 데 도움이 될 수 있다고 생각했습니다.

이는 단일 트랜잭션에서 업데이트가 완료되어 orphin 데이터를 피할 수 있음을 의미합니다 (모든 업데이트가 완료되거나 완료되지 않음).


답변

변경 사항을 저장 한 후 엔터티를 다시로드해야합니다. EF로 추적 할 수없는 데이터베이스 트리거에 의해 변경 되었기 때문입니다. 따라서 우리는 DB에서 엔티티를 다시로드해야합니다.

db.Entry(MyNewObject).GetDatabaseValues();

그때

int id = myNewObject.Id;

아래 질문에서 @jayantha 답변을보십시오.

defaultValue를 사용할 때 엔티티 프레임 워크에서 삽입 된 엔티티의 ID를 어떻게 얻을 수 있습니까?

아래 질문에서 @christian 답변을 찾는 것도 도움이 될 수 있습니다.

Entity Framework Refresh 컨텍스트?


답변

이 링크를 참조하십시오.

http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/

StoreGeneratedPattern의 속성을 identity로 설정 한 다음 고유 코드를 시도해야합니다.

그렇지 않으면 이것을 사용할 수도 있습니다.

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Your Identity column ID
}


답변

Id변경 사항을 데이터베이스에 전파 한 후 저장하는 오브젝트가 올바른지 확인하십시오 .


답변

저장 한 후에 만 ​​ID를 얻을 수 있으며 대신 새로운 Guid를 생성하고 저장하기 전에 할당 할 수 있습니다.


답변

데이터베이스에 데이터를 삽입 해야하는 동시에 엔티티 프레임 워크를 사용하여 기본 ID가 필요한 상황이 발생합니다. 해결책 :

long id;
IGenericQueryRepository<myentityclass, Entityname> InfoBase = null;
try
 {
    InfoBase = new GenericQueryRepository<myentityclass, Entityname>();
    InfoBase.Add(generalinfo);
    InfoBase.Context.SaveChanges();
    id = entityclassobj.ID;
    return id;
 }