0

프로젝트에서 ORM으로 Entity Framework를 사용합니다. Code-First 패턴을 사용한다고 가정 해 보겠습니다. 두 가지 모델이 있습니다.Entity Framework 및 중복

List<Second> res = GetData(); 
using (var ctx = new StatisticContext()) 
{ 
    foreach (var item in res) 
    { 
     ctx.Seconds.Add(item); 
    } 
    ctx.SaveChanges(); 
} 

당신이 멤버 ForeignKeyEntitySecond 클래스 First의 인스턴스가 클래스의 각 인스턴스를 볼 수 있듯이 : 이러한 여기

internal class First 
{   
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

internal class Second 
{   
    public int Id { get; set; } 

    public First ForeignKeyEntity { get; set; } 

    // other members 
} 

와 같은 데이터베이스를 코드 채우는된다. 분명히 First의 일부 인스턴스는 res에 복제 될 수 있습니다. 이 코드를 실행하면 내가 다음과 같은 메시지가 내부 예외로 ctx.SaveChanges()에 DbUpdateException을 얻을 :

Violation of PRIMARY KEY constraint 'PK_dbo.First'. 
Cannot insert duplicate key in object 'dbo.First'. 
The duplicate key value is (29459). The statement has been terminated. 

내가 중복 행을 삽입 할 수 있지만 중복을 삽입하지 않으을, 나는 행을 삽입 할 존재하지 않는 경우에만. 이 문제를 해결하는 방법? doesn'tt가있는 경우에만 외래 키 객체를 삽입하는 방법?

+0

'First : Second'의 관계는 무엇입니까? – Sampath

+0

@Sampath Second의 모든 인스턴스에는 First라는 인스턴스가 있습니다. 데이터베이스에 관해서는 두 테이블이 있습니다 : 첫 번째와 두 번째. 그리고 두 번째 테이블에있는 이드에게 외래 키가있다. 첫번째는 – Pupkin

+0

이고, 그 의미는'1 : 1'입니까? – Sampath

답변

1

일을하는 일반적인 방법은 아이템이 있는지 먼저 읽는 것입니다. 필요한 경우 사용하십시오 ctx.Seconds.Update(item);

항목이 컨텍스트에 이미있는 경우 상태를 확인할 수 있습니다. State.Modified 또는 State.Added입니다.

GetData()의 내용