16

EF 5、コード ファーストを使用します。

ナビゲーション プロパティが関係の一方の側にのみ存在するようにエンティティをモデル化したいと考えています。

したがって、テーブル Widget とテーブル WidgetType がある場合:

public class Widget
{
    public int Id { get; set; }
    public int WidgetTypeId { get; set; }
    public WidgetType WidgetType { get; set; }
}

public class WidgetType
{
    public int Id { get; set; }
    //note there is no collection of Widgets here
}

public class WidgetMap : EntityTypeConfiguration<Widget>
{
    public WidgetMap()
    {
        HasKey(t => t.Id);
        //totable, etc.

        HasRequired(t => t.WidgetType); //what else is needed?
    }
}

widgetType の観点からウィジェットをフェッチすることは絶対にしたくないので、WidgetType エンティティにナビゲーション プロパティを持たないことは (とにかく私にとって) 理にかなっています。

プロパティを WidgetType に追加せずに、コード サンプルに記載されているマッピング コードを完成させるにはどうすればよいですか? これは可能ですか?

4

2 に答える 2

16

受け入れられた答えがあることは知っていますが、上記の解決策はうまくいかず、少し調整する必要がありました。

私はEntity Framework 6を​​使用していますが、同様の問題がありました。UserAccountテーブルを指すCreatedByIDフィールドを持つBaseEntityというテーブルがありました。

これにより、UserAccount クラスに BaseEntity 型の ICollection が作成されました。BaseEntityマッピングで次のコードを使用して、これを解決できました。

this.HasOptional(t => t.UserAccount)
    .WithMany()
    .HasForeignKey(t => t.CreatedByID);

その後、EF6 で単方向の 1 対多マッピングを作成した UserAccount クラスから BaseEntity のコレクションを削除することができました。

UserAccount は BaseEntity から継承するため、UserAccount エントリはオプションです。これがモデルで必須の属性である場合は、必ず HasRequired() を使用してください。

于 2014-12-21T20:19:45.660 に答える
12

コメントで要求されたように、これが私の答えです。

試してみてください:

HasRequired(t => t.WidgetType).WithRequired().HasForeignKey(t => t.FKField);
于 2013-05-29T17:45:06.673 に答える