1

私は基本的にFKを持つ3つのテーブルを持っています

作る

  • MakeId
  • MakeName

モデル

  • モデル ID
  • モデル名
  • MakeId (外部キー)

車両

  • 車両 ID
  • 購入日
  • モデル ID (外部キー)

データベースを変更せずに、Vehicle から Make へのナビゲーション プロパティが欲しい

私は試した:

public class Make
{
    public int MakeId {get;set;}
    <snip>...</snip>
    public virtual Vehicle Vehicles {get;set;}

}

<snip>Model</snip>

public class Vehicle
{
    public int VehicleId {get;set}
    <snip>...</snip>
    public virtual Make VehicleMake {get;set;}
}


public class VehicleMap : EntityTypeConfiguration<Vehicle>
{
    public VehicleMap()
    {
        this.HasKey(t => t.VehicleId);
        <snip>...</snip>
        this.HasRequired(t => t.VehicleMake)
        .WithMany(t => t.Vehicles)
        .HasForeignKey(t => t.Model.MakeId);
    }

}

ただし、これを行ったときに例外を受け取りました。

プロパティ式 'd => d.Model.MakeId' は無効です。式はプロパティを表す必要があります: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. 複数のプロパティを指定する場合は、匿名型を使用します: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'.

データベースに Vehicle.ModelId 列を追加せずに Make & Vehicle テーブルにナビゲーション プロパティを作成するにはどうすればよいですか?

4

1 に答える 1

2

EF は、そのタイプのモデリングをサポートしていません。次のようにラップアラウンドするプロパティを作成できますModel.Make。ただし、不要な遅延読み込みにつながる可能性があります。

public class Vehicle
{
    public int VehicleId {get;set}
    <snip>...</snip>

    [NotMapped]
    public virtual Make VehicleMake 
    {
        get { return Model.Make; }
        set { Model.Make = value; }
    }
}
于 2012-07-17T15:02:17.043 に答える