2017-09-18 2 views
0

Entity Core을 사용하여 내 Db에서 모델의 단일 인스턴스를 만들려고합니다. 내가 작동하게하는 방법은 Db의 엔트리가 존재하지 않는다면 그것을 만드는 것입니다. 작업을 수행하는 게터 메소드를 작성하는 대신 Entity Core이 작업 할 빈 항목을 생성하고 다시 저장하도록 할 수 있습니까?존재하지 않는 경우 항목 만들기

FirstOrDefault을 사용해 보았습니다. 여기

은 몇 가지 예제 코드입니다 :

using (var context = new SearchTermInformationContext()) 
{ 
    // this very first line should return me the single instance or create one if it doesnt exist. 
    var searchTermInfo = context.SearchTermInformation.FirstOrDefault(); 
    searchTermInfo.num_search_terms += numSearchTerms; 
    searchTermInfo.offset = offset; 
    searchTermInfo.last_updated += (DateTime.UtcNow.Ticks/TimeSpan.TicksPerMillisecond).ToString(); 
    await context.SaveChangesAsync(ct); 
} 
+2

[Entity Framework의 가능한 복제본] 업데이트가없는 경우 추가하십시오. (https://stackoverflow.com/questions/31162576/entity-framework-add-if-not-exist-without-update) –

+0

첨부 된 예제조차도 얻을 수 있습니다. –

답변

1

FirstOrDefault()는 IEnumerable의 첫 번째 요소를 잡고, 그리고 순서가 빈 상태 (empty)의 경우 해당 유형에 대한 기본 값을 반환합니다. 엔티티는 항상 class이 될 것이므로 어떤 클래스의 기본 "값"도 null입니다. 이 행동을 바꿀 수있는 방법이 없습니다. 이 동작을 원하면 유형의 new 인스턴스를 작성하고 필드를 채우고 컨텍스트를 통해 삽입을 수행하여 직접 구현해야합니다. 정말로 멋진 것을 원한다면, DbSet<T>에 대한 확장 메소드를 작성하여 빈 인스턴스의 추가를 수행하고 변경 사항을 저장하지 않고 첨부 된 엔티티를 리턴 할 수 있습니다.

+0

많은 의미가 있습니다. 고맙습니다 – visc

관련 문제