web-dev-qa-db-ja.com

エンティティフレームワークコードファースト1対1の関係

2つのエンティティを1:1の関係に関連付けたいと思っています。 Userはプリンシパルであり、UserActivationは依存していますが、それがどのように機能するかはわかりません。

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }

    public virtual UserActivation UserActivation { get; set; }
}

public class UserActivation
{
    [Key]
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public bool Active { get; set; }

    public virtual User User { get; set; }
}

'virtual'キーワードを削除しようとし、ForeignKey( "UserId")またはForeignKey( "User")を追加しようとしました。 。データ注釈のみを使用して1対1の関係を作成したい。どんな助けでも本当に感謝しています。また、私の両方のクラスには独自のPKがあります。

11
GrandaS

外部キーは1:1の試行ではサポートされていません。

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }

    public virtual UserActivation UserActivation { get; set; }
}

public class UserActivation
{
    [Key]
    [ForeignKey("User")]
    public Guid Id { get; set; }
    public bool Active { get; set; }

    public virtual User User { get; set; }
}

タイプ「Model.PersonPhoto」と「Model.Person」の間の関連付けの主要な終了を判別できません。この関連付けの主要な端は、リレーションシップFluent APIまたはデータアノテーションを使用して明示的に構成する必要があります。

Julie Lehrmanがこれについて her Code First book で説明しています。

「この問題は、依存クラスにForeignKeyアノテーションを使用して、外部キーが含まれていることを識別することで最も簡単に解決できます。1対1の関係を構成する場合、Entity Frameworkは、依存関係の主キーも外部キーである必要があります。この例では、PersonPhotoが従属であり、そのキーであるPersonPhoto.PersonIdも外部キーである必要があります。例4-21に示すように、ForeignKeyアノテーションをPersonPhoto.PersonIdプロパティに追加します。ナビゲーションを指定することを忘れないでください。 ForeignKeyアノテーションを追加するときの関係のプロパティ。」

16
Steve Greene