2013-02-25 2 views
1

autoincrement column in SQL database자동 증가 및 SQL의 정체성

링크는 자동 증가가 SQL에 존재하는지 여부를 내 의문에 응답합니다. 나의 현재 문제가 이렇게 있습니다

,

내가 클래스의 객체를 초기화하는 동안 이러한 클래스

public class A 
{ 
    [Key] 
    public int AId{get;set;} 
    public int BId{get;set;} 
    [ForeignKey("BId")] 
    public virtual B pb{get;set;} 
} 

public class B 
{ 
    [Key] 
    public int BId{get;set;} 
    public int AId{get;set;} 
} 

로 표현이 개 테이블이 오류가 말을 발생 MySQL의에서 BId can not be null , 내가 할 수있는 그 AUTO_INCREMENT 다음

INSERT INTO myTable(col2, col3, col4) VALUES('col2','col3','col4'); 

suppos 같은으로 테이블을 초기화로 컬럼을 선언 그 col1은 자동 증가로 선언됩니다. 클래스 A에있는 BId과 비슷한 것을하고 싶습니다. 정수를 설정할 필요가 없습니다.

+1

안녕하세요 @ asp-asp, linq2sql을 사용하고 있습니까? 엔티티 프레임 워크? 다른 ORM? 문제는 불완전합니다. –

+0

글쎄 EF를 사용하고 있습니다. –

답변

1

외래 키가 실제로 작동하는 방식이 아닙니다.

기본 키를 사용하여 원하는 작업을 수행 할 수 있으며 SQL Server는 기본 키가 ID 열인 경우 기본 키를 설정합니다. 그러나 외래 키의 경우 원하는 값을 이미 알고 있어야합니다. 참조하려는 기존 인스턴스가 이미 B이어야합니다.이 인스턴스를 만들거나 A을 만들기 전에 인스턴스를 만들어야합니다.

외래 키를 자동으로 증가 시키려면 외부 키를 원하지 않고 다른 것을 원한다. 당신은 당신의 테이블 구조를 다시 생각하고 싶을지도 모른다.

1

BId 값이 필요하지 않은 경우 MySQL의 NULL 제약 조건으로 선언하고 C# 속성도 마찬가지로 NULL 허용 가능으로 설정하십시오 (public int? BId).

기본값을 BId으로 설정하려는 경우 절을 사용하여 선언 할 수 있습니다.

A에 대해 B을 새로 만들려면 A 테이블의 트리거를 사용하면됩니다.