23

Foo にはオプションの FooState がある Foo と FooState の 2 つのコード ファースト モデルがあります。

public class Foo
{
    [Key]
    public int FooId { get; set; }

    public FooState FooState { get; set; }
}

public class FooState
{
    [Key]
    public int FooStateId { get; set; }

    [Required]
    public int State { get; set; }

    [Required]
    public Foo Foo { get; set; }
}

これは正常に機能しますが、外部キーを FooState に追加しようとすると

public class FooState
{
    [Key]
    public int FooStateId { get; set; }

    [Required]
    public int State { get; set; }

    [ForeignKey("Foo")]
    [Required]
    public int FooId
    public Foo Foo { get; set; }
}

FooStateId は実際には主キーとして FooId を使用しているため、すべて失敗します。これは、データベースの観点からは理にかなっています。

ただし、FooState レコードを保存するときに Foo のインスタンスを設定する必要はありませんが、必要な属性は保持したいと思います。

これにより、FooId と状態を dto で送信でき、状態を変更したい場合に Foo オブジェクト全体を DB から取得する必要がなくなります。

最初にEFコードでこれをどのように設定すればよいですか?

4

1 に答える 1

43

これを試してみようと思ったのですが、うまくいきました。

public class FooState
{
    [Required]
    [Key]
    [ForeignKey("Foo")]
    public int FooStateId { get; set; }

    [Required]
    public int State { get; set; }

    public Foo Foo { get; set; }
}
于 2013-01-31T10:17:16.377 に答える