Linq와 Sql 및 MVC Model Binder 문제가 다시 발생합니다.ASP.NET MVC 2 : Linq와 ForeignKey 관계 및 기본 ModelBinder 낯선
는 SQL을 그들에게 설명하기 위해 클래스를 생성에 내가 Linq에있는 그들은이에 유사 :
public class Client
{
public int ClientID { get; set; }
public string Name { get; set; }
}
public class Site
{
public int SiteID { get; set; }
public string Name { get; set; }
}
public class User
{
public int UserID { get; set; }
public string Name { get; set; }
public int? ClientID { get; set; }
public EntityRef<Client> Client { get; set; }
public int? SiteID { get; set; }
public EntityRef<Site> Site { get; set; }
}
'사용자'는 '클라이언트'와 '사이트 과 관계가있다. 관리자 사용자는 클라이언트 또는 사이트에 바인딩되어 있지 않으므로 User 클래스에는 nullable ClientID 및 SiteID가 있습니다.
이제 사용자가 '사용자'개체를 편집 할 수있는보기가 있으며보기에는 모든 '사용자'속성에 대한 필드가 있습니다. 양식이 제출되면, appropiate '저장'조치를 내 UserController에서 호출됩니다 여기
public ActionResult Save(User user, FormCollection form)
{
//form['SiteID'] == 1
//user.SiteID == 1
//form['ClientID'] == 1
//user.ClientID == null
}
문제가 된 ClientID가 설정되지 않습니다 즉,이 값이 FormCollection의 경우에도, 항상 null입니다.
무엇이 잘못되었는지 알아보기 위해 나는 Linkq to Sql 디자이너 생성 클래스에서 ClientID와 SiteID getters 및 setter에 대한 중단 점을 설정합니다. 다음과 같은 것으로 나타났습니다. SiteID가 설정되고 ClientID가 설정되었지만 Client EntityRef 속성이 null 값으로 설정되고 차례로 ClientID가 null로 설정됩니다. 나는 왜 그리고 무엇이 Client 속성을 설정하려고하는지 알지 못한다. 왜냐하면 Site 속성 setter가 결코 호출되지 않기 때문에 Client setter 만 호출되고 있기 때문이다.
수동으로이 같은 FormCollection에서 클라이언트 ID를 설정 :user.ClientID = int.Parse(form["ClientID"].ToString());
는 'ForeignKeyReferenceAlreadyHasValueException'가 발생, 이미 이전에 null로 설정 되었기 때문에. 내가 발견 한 유일한 해결 방법은 사용자 정의 메서드로 생성 된 부분 사용자 클래스를 확장하는 것입니다.
Client = default(EntityRef<Client>)
그러나 이것은 만족스러운 해결책이 아닙니다. 이런 식으로 생각하지 않아?
제발 누군가 나를 계몽하십시오. 지금까지 SQL에 Linq는 나를 미치게합니다! 난 그냥 MVC 3과 동일한 문제로 실행했습니다
안부