2012-04-19 1 views
2

나는 이것이 간단한 구성 오류라고 확신하지만 내 경험이 부족하여 그것을 고칠 수 없다. 기본적으로 엔터티 프레임 작업을 사용하여 EMPLOYEE을 테이블에 추가하려고합니다.Entity Framework에서 SQL Server에서 기본 키를 생성 할 수없는 이유는 무엇입니까?

여기 내 방법 :

public void createEmployee(CreateEmployeeModel model) 
    { 
     EMPLOYEE emp = new EMPLOYEE() { 
      emp_name = model.Name, 
      emp_email = model.Email, 
      emp_cell_phone = model.CellPhone, 
      emp_adr = model.Address 
     }; 

     _db.AddToEMPLOYEES(emp); 
     _db.SaveChanges(); 
    } 

나는 _db.SaveChanges(); 호출에 다음과 같은 오류가 발생합니다 : 고유 인덱스 'R18_SDE_ROWID_UK'와 객체 dbo.EMPLOYEES '에 중복 키 행을 삽입 할 수 없습니다. 중복 키 값은 (0)입니다.

다음
StoreGeneratedPattern : Identity 
Concurrency Mode : None 
Default Value : (None) 
Entity Key : True 
Name: emp_id 
Nullable: False 
Type : Int32 

는 SQL 서버의 Employees 테이블에 대한 emp_id 열 속성입니다 : 여기

는 EMPLOYEE 엔티티에 대한 emp_id 열 속성입니다

enter image description here

잘 모르겠어요 테이블에 직원이 4 명인 경우 기본 키가 항상 0으로 생성되는 이유는 무엇입니까? (0, 1, 2, 3).

+0

먼저이 코드 또는 edmx/DB를 먼저 사용합니까? 당신의 모델은 어떻게 생겼습니까? – BrokenGlass

+0

이것은 DB 첫 번째 접근 방식입니다. – ZeroDivide

+0

'emp_id'의 속성을 자동 증가 시키도록 변경해야하기 때문에 구성 문제라고 생각합니다. 내가 잘못했다고 좋은 기회가있다. – ZeroDivide

답변

2

모델의 속성을 수동으로 변경해야하는 경우 열을 데이터베이스 자체의 ID 열로 설정하지 않았을 가능성이 있습니다.

데이터베이스를 ID 열로 설정 한 경우 엔티티를 삭제하고 다시 추가하십시오.

+0

이 작업을 수행하여 내 협회 중 하나를 (0..1)에서 (0..1)에서 많은 (0..1)로 변경했습니다. 연결 원래로 조정 시도하고이 오류가 throw됩니다. 오류 오류 113 : Multiplicity 'FK_aspnet_UsersEMPLOYEE'관계에서 역할 '직원'에서 유효하지 않습니다. 종속 역할 속성은 주요 속성이 아니기 때문에 종속 역할의 다중 도의 상한선은 *이어야합니다. – ZeroDivide

+0

@ZeroDivide - 데이터베이스 모델이 데이터 모델과 다른 것을 의미합니다. 코드 모델을 원하는대로 변경할 수는 없으며 실제 데이터 모델과 일치해야합니다. 당신의 경우에는, 당신이 할 수없는 일을 먼저 수동으로 변경하거나 모델이 생성 된 이후에 데이터베이스를 변경했습니다. 특히 두 테이블에 동일한 기본 키가없는 한 1 : 1 (또는 0..1에서 0..1)을 사용할 수 없습니다. 또한 동일한 키 값을 공유해야하기 때문에 이들 중 하나만 ID가 될 수 있습니다. –

+0

그래, 데이터 모델과 엔티티 모델을이 연관성/관계를 추가하는 동안 다시 변경해야했습니다. 무언가가 데이터베이스에 대한 모든 변경 사항을 망쳐 놓은 것 같습니다. 나는 사무실을 떠나야했지만 당신의 솔루션이 그랬던 것처럼 보입니다. – ZeroDivide

0

EMPLOYEE의 새 인스턴스를 올바르게 설정하려면 _db.EMPLOYEES.CreateObject()과 같은 작업을해야 할 수도 있습니다.

var emp = _db.EMPLOYEES.CreateObject(); 
//set values 

_db.EMPLOYEES.AddObject(emp); 
_db.SaveChanges(); 
+0

이 코드를 변경하고 나에게 같은 오류가 발생했습니다. – ZeroDivide

+0

아니요, 그렇게하지 않아도됩니다. 특정 상황에서 변경 내용 추적 프록시를 생성하려는 경우에만 필요합니다. –

관련 문제