2014-11-30 1 views
0

ViewModel의 Entity Framework에서 ASP.NET MVC를 사용하여 데이터베이스 테이블에 새 레코드를 삽입하려고합니다. 생성 된 INSERT SQL 문이 도메인 모델의 모든 열이 아닌 내 View Model의 열만 포함하도록합니다. 다음은 내가 사용하고있는 테스트 코드입니다.엔티티 프레임 워크를 사용하여 내 viewModel에있는 열만 어떻게 삽입합니까?

ViewModel 클래스

public class ViewModel1 
{ 
    public string column1 {get; set;} 
    public string column2 { get; set; } 
} 

내 도메인 모델 클래스 I 데이터를 삽입하고있어

public partial class Entity1Table 
{ 
    public int ID { get; set; } 
    public string column1 { get; set; } 
    public string column2 { get; set; } 
    public string column3 { get; set; } 
} 

내 컨트롤러 액션. 보기로 데이터를 채우 겠지만 단순화를 위해 여기에 ViewModel 클래스를 수동으로 채 웁니다. 이 코드에서 생성 된 SQL을 볼 때

public ActionResult Index() 
{ 
    //db is my data context 
    Mapper.CreateMap<ViewModel1,Entity1Table>().ReverseMap(); 
    var myViewModel = new ViewModel1 { column1 = "testData1", column2 = "testData2" }; 
    var InsertThis = Mapper.Map<ViewModel1, Entity1Table>(myViewModel); 

    db.Entity1Table.Add(InsertThis); 
    db.SaveChanges(); 
    return View(); 
} 

그것은 다음과 같습니다 : 여기서 볼 수 있듯이, 엔티티 프레임 워크가 어떤 매개 변수가 없음에도 불구하고, 3 열로 NULL를 삽입한다

INSERT [dbo].[Entity1Table]([column1], [column2], [column3]) 
VALUES (@0, @1, NULL) 
SELECT [ID] 
FROM [dbo].[Entity1Table] 
WHERE @@ROWCOUNT > 0 AND [ID] = scope_identity() 

-- @0: 'testData1' (Type = AnsiString, Size = 30) 
-- @1: 'testData2' (Type = AnsiString, Size = 30) 
-- Executing at 11/29/2014 11:38:17 PM -06:00 
-- Completed in 45 ms with result: SqlDataReader 

로 그것은 모델의 일부입니다. 데이터베이스의 기본값을 사용할 수 있기를 원하기 때문에 수백 개의 열이있는 테이블이 있고이 NULLS를 모두 삽입하고 싶지는 않습니다. INSERT가 여분의 NULLS없이 깨끗하게 보이길 원합니다.

이 작업은 Entity Framework에서 수행 할 수 있습니까?

+1

데이터베이스의 기본값은 무엇입니까? 'null '이 적절하지 않은 이유는 무엇이든 입력하지 않는다는 것입니다. –

+1

EF는 새로운 행을 삽입하기 때문에 삽입해야 할 내용은 무엇입니까? 새 행을 만들 때 값을 지정하지 않고 열이 nullable이면 데이터베이스에 null이 남기 때문에 아무런 차이가 없습니다. 어쨌든 EF는 항상 모든 열의 값을 삽입하며 변경할 수있는 유일한 방법은 다음과 같습니다. 당신에게 자신의 인터셉터를 만드는 것이지만 이것은 매우 복잡 할 것이고 명백한 이점을주지 못할 것입니다. – Pawel

+0

확인. 고맙습니다. 그거 알아두면 좋을거야. 매우 넓은 테이블에 수백 개의 NULL을 삽입해야한다는 것이 이상하게 보입니다. 아마도 매개 변수가있는 열만 삽입하는 방법이 있다고 생각했습니다. @StephenMuecke 네, 데이터가 올바른지 만 데이터베이스에 기본 바인딩이 있다면 어떻게 될지 잘 모르겠습니다. – mje777

답변

0

데이터 열에 대한 기본값이있는 경우 및 제한된 열을 삽입하려고하면 기본값보다 SQL 쿼리가 삽입됩니다. EF는 Sql에 설정된 기본값에 영향을 미치지 않습니다.

1

관계형 데이터베이스를 사용하는 경우 삽입하지 않을 속성에 대해 Null 또는 기본값을 사용하는 것입니다.

관련 문제