2012-05-17 2 views
2

간단한 클래스에 문제가 있습니다. 내 클래스의 한 속성은 다른 클래스에 대한 참조이지만, 읽을 때 항상 null입니다.Entity Framework 코드 첫째 : 참조 된 개체를로드하지 않습니다.

public class Product 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public String Description { get; set; } 

    public virtual Trademark Trademark { get; set; } 
} 

public class Trademark 
{ 
    public int TrademarkId { get; set; } 

    public String Description { get; set; } 
} 

이들은 매우 간단합니다. 은 그 때 나는 첫 번째 요소 얻을 때 :

Product p = context.Products.First(); 

그리고 p이 올바른 제품을 포함, 그러나 상표는 null입니다.

내가 좋아하는, LINQ를 사용하여 쿼리를 수행 할 경우에도 : 데이터베이스가 좋아 생성

var prods = context.Products.Where(p => p.Trademark.TrademarkId == 1).ToList(); 

.

SQLSERVER 컴팩트 에디션, 어떤 제안 4.0

감사 EF 4.3.1을 사용.

추가 :이 내 상황에 맞는 클래스 :

public class HPContext : DbContext 
{ 
    public HPContext() 
     : base() 
    { 
     this.Configuration.LazyLoadingEnabled = false; //Just for test 

    } 

    public DbSet<Product> Products { get; set; } 
    public DbSet<Trademark> Trademarks { get; set; } 

} 

추가 : 데이터베이스 스키마

Table: 
    Products 

Fields: 
    Id int primaryKey 
    Description nvarchar(4000) 
    Trademark_TrademarkId int 


Table: 
    Trademarks 

Fields: 
    TrademarkId int PrimaryKey 
    Description nvarchar(4000) 
+0

데이터베이스 스키마를 제공 할 수 있습니까? 분명히 협회에 문제가 있습니다 ... – Dennis

+0

좋아, 자택에 1 시간 안에 데이터베이스를 게시 하겠지만, 데이터베이스는 ef로 생성됩니다. – Gabriel

+0

내 컴퓨터에 로그인하여 스키마를 가져올 수 있습니다. – Gabriel

답변

3

게으른 로딩을 사용할 수없는 경우 탐색 속성을 포함 Include를 사용한다

Product p = context.Products.Include("TradeMark").First(); 
+0

고마워,하지만 난 예외가있어 : 지정된 포함 경로가 유효하지 않습니다. EntityType 'Product'는 'Trademark'라는 이름으로 탐색 속성을 선언하지 않습니다. – Gabriel

+0

"상표"를 사용해 보셨나요? – Tundey

+0

죄송합니다. 실수를해서 "상표"로 다시 시도하고 작동합니다. 다른 간단한 방법이 있습니까? 제품에는 여러 개의 참조가 있기 때문에? 감사합니다. – Gabriel

관련 문제