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


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를 호출하면 설정됩니다.