2

単純なクラスに問題があります。私のクラスの 1 つのプロパティは別のクラスへの参照ですが、読み取ると常に null です。

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商標は無効です。

次のように、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)
4

1 に答える 1

3

Include遅延読み込みが有効になっていない場合は、ナビゲーション プロパティを含めるために使用します。

Product p = context.Products.Include("TradeMark").First();
于 2012-05-17T13:28:05.320 に答える