2012-08-28 3 views
0

데이터베이스를 처음 설계했습니다. 내 nullable 필드 중 하나에 대해 사용자가 편집기 텍스트 상자를 비워 둘 수 있도록 내 모델의 기본값을 갖고 싶습니다. EF는 데이터베이스에 null을 던지기를 원하지 않는 것처럼 보입니다. 그래서 nullable 속성에 대해 기본값으로 null을 설정할 수 있기를 바랍니다.mvc3 데이터베이스 첫 번째 모델 기본값

나는 제출할 때 텍스트 상자를 비워두면 속성에 대해 내 데이터베이스에 null을 삽입하려고합니다.

내가 원하는 것을하기 위해 부분 클래스에 생성자를 추가 할 수 있다는 것을 읽었습니다.

public partial class MyClass{ 
    public MyClass() 
    { 
     field1 = null; //this would be the default value for field1 
    } 
} 

유일한 문제는 이미 작업 생성자를 가지고있어 모델의 자동 생성 된 부분 클래스, 그래서 다른 (영구) 부분 클래스에 생성자를 추가 할 수 없습니다 : 그래서 당신은 기본적 것이다 . 자동 생성 된 부분 클래스는 데이터베이스에서 edmx를 업데이트 할 때 덮어 쓰기 때문에 업데이트하지 않으려합니다.

+0

생성자를 오버로드 하시겠습니까? –

답변

0

문자열의 기본값은 이미 null이어야하므로 잘못된 경로를 사용하고 있다고 생각합니다.

문제는 글 상자가 비어 있어도 양식 게시와 함께 전달된다는 것인데, 이는 글 상자가 명시 적으로 설정하는 방법을 찾더라도 null 값보다는 컨트롤러에 빈 문자열이됩니다. 초기 클래스에서 문자열을 null로 설정합니다.

대신 양식이 게시 된 후 컨트롤러에서 문자열 값을 확인하고 비어있는 경우 null로 설정하십시오.

if (String.IsNullOrEmpty(formModel.MyString)) formModel.MyString = null; 

어느 쪽이든, 또는 비어있는 경우 설정을 결합 모델 동안 필드의 값을 확인하고하지 않는 것이 기본 모델 바인더를 만들 수 있습니다.

+0

컨트롤러에 체크하지 않으려 고했습니다. 모델 레벨에서 체크/디폴트를 가질 수 있다면 좋을 것입니다. 따라서 한번만 정의하면됩니다. 저는 MVC와 EF에 대해 아직 완전히 익숙하지 않지만, 모델 레벨에서 데이터 주석으로 얻을 수있는 모든 이점을 정말로 좋아하고이를 에뮬레이션하려고했습니다. –

+0

흠. 나는 어쩌면 내 edmx가 올바르게 업데이트되지 않았을 지 모르겠다. 내가 지난 밤에 null을 허용하기 위해 많은 필드를 변경했을 때, 그러나 오늘 시도했을 때, 모든것이 내가 원하는 것을하고있다. 빈 필드). –

+0

예. 나는 그것에 대해 궁금해하고 있었다. 주제에 대해 더 생각할 때 MVC는 실제로 공백 필드를 null로 바인딩한다는 것을 깨달았습니다. 주석으로'[DisplayFormat (ConvertEmptyStringToNull = false)] '로 변경할 수 있지만 기본적으로 true입니다. 어쨌든 이제 다행입니다. –

관련 문제