2013-05-20 2 views
1

이전과 같은 질문에 여러 번 대답했지만 확신 할 수 없었습니다.Entity Framework 5는 Include()와 관계를 가져 오지 않습니다.

엔티티가 기존 테이블에서 생성 된 MVC 4 응용 프로그램을 Entity Framework 5와 함께 구축하고 있습니다.

namespace RebuildingModel 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class StandardCodeTable 
    { 
     public StandardCodeTable() 
     { 
      this.StandardCodeTableTexts = new HashSet<StandardCodeTableText>(); 
     } 

     public int TableCode { get; set; } 
     public string RefTableName { get; set; } 

     public virtual ICollection<StandardCodeTableText> StandardCodeTableTexts { get; set; } 
    } 
} 

namespace RebuildingModel 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class StandardCodeTableText 
    { 
     public int TableCode { get; set; } 
     public string LanguageCode { get; set; } 
     public string TextVal { get; set; } 

     public virtual StandardCodeTable StandardCodeTable { get; set; } 
    } 
} 

namespace RebuildingSite.Models 
{ 
    public class CodeTableJoined 
    { 
     public int TableCode { get; set; } 
     public string ReferenceTableName { get; set; } 
     public string LanguageCode { get; set; } 
     public string TextValue { get; set; } 
    } 
} 

나는이처럼 보이는 DAO를 가지고 : I는 다음과 같이 엔티티 클래스를

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace RebuildingModel.Dao 
{ 
    public class CodeTableDao 
    { 
     public CodeTableDao() { } 

     public ISet<StandardCodeTableText> GetCode(string refTableName) 
     { 
      HashSet<StandardCodeTableText> codes = new HashSet<StandardCodeTableText>(); 

      using (var db = new RebuildingTogetherEntities()) 
      { 
       db.StandardCodeTableTexts.Include("StandardCodeTables"); 

       var query = from c in db.StandardCodeTableTexts 
          where c.StandardCodeTable.RefTableName == refTableName 
          orderby c.TableCode 
          select c; 

       foreach (var item in query) 
       { 
        codes.Add(item); 
       } 
      } 

      return codes; 
     } 
} 

I는 다음과 같습니다 컨트롤러가 있습니다

namespace RebuildingSite.Controllers 
{ 
    public class CodeTableController : Controller 
    { 
     public ActionResult Index(string refTableName) 
     { 
      CodeTableDao dao = new CodeTableDao(); 

      ICollection<StandardCodeTableText> codes = dao.GetCode(refTableName); 

      HashSet<CodeTableJoined> joins = new HashSet<CodeTableJoined>(); 

      foreach (var code in codes) 
      { 
       CodeTableJoined join = new CodeTableJoined(); 

       join.TableCode = code.TableCode; 
       join.LanguageCode = code.LanguageCode; 
       join.TextValue = code.TextVal; 
       join.ReferenceTableName = code.StandardCodeTable.RefTableName; 

       joins.Add(join); 
      } 

      ISet<string> refTableNames = dao.GetReferenceTables(); 

      ViewBag.RefTableNames = refTableNames; 

      return View(joins); 
     } 
    } 
} 

I을 컨트롤러에 연결된보기를 실행하면 관계가 사용 된이 줄에서 ObjectDisposedException이 발생합니다.

join.ReferenceTableName = code.StandardCodeTable.RefTableName; 

이것은 단순해야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 나는 많은 다른 곳에서, 심지어 여러 번 문맥으로부터 Include() 호출을 추가하려고했다.
또한 Linq 쿼리에서 명시 적 조인을 추가하려고 시도했습니다. 나는 EF에 그 관계를 가져올 수 없습니다. 대답에 내 의견을 복사

+2

는 실제 쿼리에있을 포함해야 실제 쿼리에있을 포함 넣어? 'var query = from c from db.StandardCodeTableTexts.include ("StandardCodeTables"). 여기서 c.StandardCodeTable.RefTableName == refTableName orderby c.TableCode 선택 c; ' –

+0

물론! 나는 그것이 단순한 무엇인지 알았다. 그것은 저에게 바보 같았습니다 - 지적 해 주셔서 고맙습니다. – Brad

답변

1

- (가)

var query = from c in 
db.StandardCodeTableTexts.include("StandardCodeTables"). where 
c.StandardCodeTable.RefTableName == refTableName orderby c.TableCode 
select c; 
관련 문제