2010-08-04 3 views
0

저는 ASP.NET MVC를 시작하면서 데이터 컨텍스트에 NHibernate를 사용하고 있습니다. 엔티티 클래스에 외래 키 필드를 보관하여 목록을 쉽게 드롭 다운 할 수 있도록 만들었지 만 그렇지 않습니다.ASP.NET MVC - NHibernate - DropDownLists

var user = userRepository.GetById(id); 

if (!TryUpdateModel(user, "User", new[] { "UserName", "RoleID" })) 
    return View(user); 

// Update the role 
user.Role = roleRepository.GetById(user.RoleID); 

이 나를 User.RoleID 속성에 내 유효성 검사 논리를 넣을 수 있습니다 :

여기에 내 게시물 다시 작업입니다.

저장 될 때까지 모든 것이 제대로 작동합니다. 내 사용자 및 매핑 클래스는 다음과 같습니다.

public virtual int UserID { get; set; } 

[Required(ErrorMessage = "Username is required")] 
public virtual string UserName { get; set; } 

[Required(ErrorMessage = "Role is required")] 
public virtual int RoleID { get; set; } 

public virtual Role Role { get; set; } 

public UserMap() 
{ 
    Table("Users"); 
    Id(x => x.UserID); 
    Map(x => x.UserName); 
    Map(x => x.RoleID); 
    References(x => x.Role, "RoleID"); 
} 

그러나 변경 사항을 커밋하려고하면 오류가 반환됩니다. Map (x => x.RoleID); 위의 매핑에서 삽입이 성공적으로 완료되었지만 사용자를 표시 할 때 데이터가 채워지지 않았습니다.

내가 선호하는 솔루션은 사용자 엔티티 (NHibernate에서 권장하는)에서 RoleID 속성을 제거하는 것이지만 사용자 정의 논리를 직접 처리해야합니다.

누군가 도와 주시면 감사하겠습니다. 감사합니다

+0

정확히 무엇이 오류입니까? –

+0

Count = 3 인이 SqlParameterCollection에 대한 인덱스 3이 잘못되었습니다. – nfplee

답변

0

내가 이렇게하는 가장 좋은 방법을 발견 한 것은 다음과 같은 말을하는 것입니다 : 내 해키 솔루션을 상대적으로 행복 해요하지만 지금은

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Create(FormCollection collection) 
{ 
    var user = new User(); 

    if (!TryUpdateModel(user, new[] { "UserName", "Role" })) 
     return View(user); 

    ... 
} 

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Edit(int id, FormCollection collection, string returnUrl) 
{ 
    var user = userRepository.GetById(id); 
    user.Role = new Role(); // Needed to prevent another issue when saving 

    if (!TryUpdateModel(user, new[] { "UserName", "Role" })) 
     return View(user); 

    ... 
} 

누군가가 내가이 제거하는 방법을 알고 있다면 user.Role = 새 역할(); 편집 작업에서 그들이 공유 할 수 있다면 고맙겠습니다. 감사가 실패하고 get (예 : 역할 검색)을 할 때 여러 데이터를보기로 반환하는 경우 감사합니다.

btw 감사합니다. 그런 다음 다른 문제를 방지하기 위해 nhibernate 트랜잭션에서 변경 한 내용을 롤백해야합니다. 희망이 누군가가 시간을 절약 할 수 :).

관련 문제