2011-05-09 3 views
1

MVC3을 Entity Framework Code First와 함께 사용하고 있습니다. 다음 모델을 가지고 있습니다. MyObject를 내 생성 페이지에서MVC/EF 코드로 하위 오브젝트를 선택/생성하는 올바른 방법은 무엇입니까

public class MyObject 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int MySubObjectId { get; set; } 

    public virtual MySubObject MySubObject { get; set; } 
} 
public class MySubObject 
{ 
    public int Id { get; set; } 
    public string SubName { get; set; } 
} 

, 사용자는 사용하기 위해 기존 MySubObject을 선택하거나 새로운 하나를 (선택하거나 MySubObject에 대한 편집 템플릿/자동 완성 텍스트 상자 승 이루어집니다 생성)을 생성 할 수 있습니다.

바인딩/컨트롤러 관점에서 이것을 적절하게 처리하는 방법은 무엇입니까?

해당 ID가 유효하지 않은 경우 MySubObject.Id를 사용하여 새 객체를 만들어야합니까? 컨트롤러에 다시 게시 될 때 MySubObject.SubName을 사용하고 ID를 검색해야합니까?

내가 생각해 본 모든 것은 컨트롤러 측에서 꽤 난잡 해 보인다. 반환 값이 기존과 관계를 구축하는 데 사용할 수 있습니다 법인 인 경우

var mySubObject = context.SubObjects.SingleOrDefault(o => o.Name == name); 

: 다른 방법은 다음과 같은 방법을 문의 그래서 거기에

답변

0

당신은 당신이 ID가 필요하여 관계를 구축 할 수 있지만 텍스트를 전달하는 하위 개체. null을 얻는다면 새로운 하위 객체를 만들어야한다는 것을 알고 있습니다. 새 인스턴스를 만들고 기본 객체의 탐색 속성에 할당하면 간단히 삽입해야합니다.

몇 가지 참고 사항 :이 작업을 수행하려면

  • , 당신은 하위 개체의 Name에 고유 키를 정의해야합니다. EF는 고유 키를 지원하지 않으므로 코드에서 먼저 use custom database initializer을 데이터베이스에서 직접 수행해야합니다.
  • 이름 비교시 민감도가 ViewBag 다음 드롭 다운 상자의보기에서 사용되는 선택 목록을 저장하는 데 사용할 수있는 데이터베이스
0

의 데이터 정렬을 기반으로합니다주의하십시오. 뷰

ViewBag.MySubObjectId = new SelectList(db.MySubObjects, "MySubObjectId", "SubName", model.MySubObjectId); 

이어서 제어기

@Html.DropDownList("MySubObjectId", String.Empty) 
관련 문제