[C#] Linq to Sql이 Null을 허용하지 않는 DB 기본값을 무시하거나 위반하지 않도록하려면 어떻게해야합니까?


Answers

나는 같은 문제에 부딪쳤다. 그리고 같은 결론에 도달했다. Linq To SQL에서 DB 할당 기본값을 사용하는 nullable이 아닌 필드를 얻는 좋은 방법은 없습니다.

해결 방법 : SetDefaults () 메서드를 사용하여 CodeProject에 연결된 Robert Paulson과 매우 유사한 메서드를 추가하고이를 내 테이블 엔터티 기본 클래스의 기본 생성자에서 호출합니다. 95 %의 시간 때문에 0, 빈 문자열 또는 getdate ()를 설정하기 때문에 잘 작동합니다.

Question

다음 필드가있는 테이블이있는 SQL Server DB가 있습니다.

  1. 기본값은 1, bitNOT NULL .
  2. 디폴트 값 gettime() , NOT NULL smalldatetime .
  3. 디폴트 값가없는 intIDENTITYNOT NULL 입니다.

이 테이블에 대해 Linq to SQL을 생성하면 다음과 같은 결과가 발생합니다.

  1. bit 에는 특별한 대우가 주어지지 않습니다.
  2. smalldatetime 에는 특별한 대우가 주어지지 않습니다.
  3. intIsDbGenerated 로 표시됩니다.

즉, SQL에 Linq를 사용하여 삽입 할 때 다음과 같은 결과가 발생합니다.

  1. bit 는 0으로 전송되어 기본값을 무시합니다. 권리?
  2. smalldatetime 은 초기화되지 않은 System.DateTime 으로 보내지고 SQL Server smalldatetime 범위에 속하지 않으므로 SQL 서버에서 오류가 발생합니다. 권리?
  3. IsDbGenerated int 는 전송되지 않습니다. DB는 Linq가 SQL로 읽어 들일 값을 생성합니다.

이 시나리오가 작동하게하려면 어떤 변화가 있습니까?

요약 : DB 할당 기본값이 아닌 nullable 필드를 원하지만 Linq를 사용하여 SQL을 업데이트하거나 삽입 할 때 값을 제공 할 수 없다는 것을 의미하는 IsDbGenerated 는 필요하지 않습니다. 또한 Linq에서 SQL로 생성 된 코드를 직접 수정해야한다는 것을 의미하는 IsDbGenerated 원하지 않습니다.

편집 : 대답은 SQL 현재 Linq 제한이 것 같다.




datacontext (부분 클래스)에 대해 다른 파일을 만든 다음 InsertYOURENTITY 및 UpdateYOENENTY 부분 메소드를 사용하여 속성을 검사하고 적절한 값을 할당 할 수 있습니다. 코드를 작성한 후 ExecuteDynamicInsert 또는 ExecuteDynamicUpdate를 호출하면 설정됩니다.