2

最初に EF4 コードを使用しており、クラス プロパティと外部キーで構成される複合キーを生成したいと考えています。Order と Company の 2 つのクラスがあります。Order クラスは参照を保持しますが、これは必ずしも企業間で一意であるとは限りません。そこで、Reference と Company.CompanyId で構成される複合キーを使用するつもりです。

以下を使用して設定しようとしましたが、「キー式が無効です」というエラー メッセージが表示されます。

modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company.CompanyId });

私も試してみました

modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company });

これは失敗します。

これらは私のクラスです:

public class Order
{
   public string Reference { get; set; }
   public Company Company { get; set; }
}

public class Company
{
   public int CompanyId { get; set; }
   public virtual ICollection Orders { get; set; }
}

どんな助けでも大歓迎です。

4

4 に答える 4

5

Antony Highsky が述べたように、キーではスカラー プロパティのみを使用できます。そのため、外部キー (スカラー プロパティ) をOrderクラスに追加し、以下に示すようにナビゲーション プロパティCompanyに関連付ける必要があります。

public class Order
{
    public string Reference { get; set; }

    public int CompanyId { get; set; }

    [RelatedTo(ForeignKey = "CompanyId")]
    public Company Company { get; set; }
}

次に、モデル ビルダーを使用して複合キーを作成します。

modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.CompanyId }); 

データ注釈 (RelatedTo 属性) が Entity Framework CTP 3 で導入されたことに注意してください。HasKey メソッドの代わりにデータ注釈のみを使用する別のオプションについては、次の投稿を参照してください。

于 2010-11-20T05:37:10.987 に答える
1

これを試しましたか?

modelBuilder.Entity()。HasKey(o => o.Reference); modelBuilder.Entity()。HasKey(o => o.CompanyId);

于 2010-11-12T03:44:49.957 に答える
1

正しくないように見える点の 1 つは、非ジェネリック バージョンの ICollection を使用していることです。これを試して:

public virtual ICollection<Order> Orders { get; set; }
于 2010-10-28T02:19:28.780 に答える
0

このソースによると、キーではスカラー プロパティのみが許可されます。ナビゲーション プロパティはそうではありません。

于 2010-11-19T22:59:01.707 に答える