2013-08-30 3 views
0

EntityFramework를 사용하여 데이터베이스에 프로젝트 버전 번호를 저장합니다. . UI 페이지에서 사용자가 버전 (major, minor, build) 정수 값을 입력하고 저장 버튼을 클릭하십시오. 전에 저장, DB에 중복 버전이 생성되지 않도록하고 싶습니다.엔터티 프레임 워크 중복되는 항목을 방지하는 방법

는 내가 무엇을 시도하고 추가하려는 것과 같은 세부 사항을 데이터베이스에 항목이있는 경우에 major.minor.build 조합이

ProjVersion newVersion=new ProjVersion(); 
newVersion.Major=10; 
newVersion.Minor=1; 
newVersion.Build=1; 
this.repository.Add<ProjVersion>(newVersion); 
//here how can I ensure that no duplicate versions are added to database 
this.repository.SaveChanges(); 

[Serializable] 
    public class ProjVersion 
    { 
     [Key] 
     public int Version_Id { get; set; } 
     public int Major { get; set; } 
     public int Minor { get; set; } 
     public int Build { get; set; } 
    } 

답변

0

확인 고유 있는지 확인하는 것입니다 . 그렇지 않다면 새로운 버전이고 그것을 추가해야합니다. 그렇다면 복제본이고 그 상황을 처리하기를 원하는대로해야합니다. 모든 속성 (열) 기본 키의 일부인 Compound Key을 사용할 필요가 같은

if (repository.Get(x => x.Major == newVersion.Major && 
    x.Minor == newVersion.Minor && x.Build == newVersion.Build) 
    .Count() > 0) 
{ 
    //notify the user that they are making a duplicate entry 
} 
else 
{ 
    repository.SaveChanges(); 
} 
+1

그리고 "using (TransactionScope tsTransScope = new TransactionScope())"를 추가하십시오. – Ubikuity

+0

version_id는 자동으로 생성 된 number.so이므로 새 레코드가 추가 될 때마다 version_id로 새 번호가 생성됩니다. 그러나 여기에서 major.minor.build 조합이 고유한지 확인하는 것이 좋습니다 – Millar

+0

@Millar, 예 그건 내 실수 였어. 지금 정확한 코드를 보여주기 위해 편집되었습니다. –

0

는 소리가 난다.

{ 
    [Key, Column(Order = 0)] 
    public int Major { get; set; } 

    [Key, Column(Order = 1)] 
    public int Minor { get; set; } 

    [Key, Column(Order = 2)] 
    public int Build { get; set; } 
} 

일치하는 키와 함께 레코드를 삽입하면 Exception가 생성됩니다.

+0

중복 항목을 허용하지 않음으로써 원하는 결과를 얻을 수는 있지만 복합 기본 키의 복잡성을 초래합니다 (예 : 해당 필드를 수정할 수 없음). –

+0

이것이 버전 계획을위한 것이라면'Version'을 변경하는 데 사용 된 것을 볼 수 있지만, 빌드 된 버전을 나타내는 경우 ('Build' 속성을 포함하고 있다고 가정하기 때문에) 왜 버전을 변경하겠습니까? 그것은 다른 버전이 될 것입니다 - 그렇지 않습니까? – STW

+0

우리는 전체 프로젝트 명세 없이는 확실히 알 수 없지만 사람들은 실수를 저지른다. 실수로 버전 10.1.1을 10.1.2로 입력하면 행을 삭제할 수 없다는 단서를 변경할 방법이 없습니다. 그리고이 프로젝트가 삭제를 허용하지 않는다면 어떻게 될까요? 그런 다음 계속 남아 있어야하며 실제로 10.1.2 버전을 사용하게되면 어떻게됩니까? –