2

EF でいくつかのマッピングの問題があります。

これは私のクラスです

public class User{
    public Guid Id { get; set; }
    // Fullname of the user account owner
    public string Name { get; set; }
    public string Email { get; set; }
    public string Username { get; set; }
    public Player Player { get; set; }
}

public class Player
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual User User { get; set; }
}

問題なく動作しますが、このクラスでナビゲーション プロパティ Player と User を作成したいと考えています。私はこの流暢なコードを持っています:

        modelBuilder.Entity<User>()
            .HasOptional(x => x.Player)
            .WithOptionalDependent(x => x.User)
            .Map(x => x.MapKey("Username"));

しかし、このエラー メッセージしか表示されず、何が問題なのかわかりません。

型の各プロパティ名は一意である必要があります。プロパティ名 'Username' は既に定義されています。

私のDBセットアップはクラスのように見えます.playerテーブルでは名前は一意です。User テーブルで一意ではありません。ユーザーはプレーヤーなしで存在でき、その逆も可能です。(実際には、Player クラス内に User プロパティは必要ありませんが、それは要件だと思いますか?!)

4

4 に答える 4

1

UserName が既にオブジェクト モデルのプロパティであるという事実について不平を言っていると思います。Map() メソッドのドキュメントを参照してください。

http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.configuration.foreignkeynavigationpropertyconfiguration.map%28v=vs.103%29から:

オブジェクト モデルで公開されていない外部キー プロパティを使用するようにリレーションシップを構成します。列とテーブルは、構成アクションを指定してカスタマイズできます。空の構成アクションが指定されている場合、規則に従って列名が生成されます。オブジェクト モデルで外部キー プロパティが公開されている場合は、HasForeignKey メソッドを使用します。すべてのリレーションシップが、オブジェクト モデルでの外部キー プロパティの公開をサポートしているわけではありません。

于 2012-09-01T18:43:02.357 に答える
0

modelBuilder コードを削除し、従属テーブルで PrimaryKey を ForeignKey としてマークします。たとえば、ユーザーなしではプレーヤーが存在しない場合:

public class User
{
    public Guid Id { get; set; }
    // Fullname of the user account owner
    public string Name { get; set; }
    public string Email { get; set; }
    public string Username { get; set; }

    public Player Player { get; set; }
}

public class Player
{
    [ForeignKey("User")]
    public Guid Id { get; set; }

    public string Name { get; set; }

    public virtual User User { get; set; }
}

ForeignKey 属性は、1 対 1 のどちら側が依存しているかを EF に伝え、適切にマップできるようにします。

于 2013-03-31T00:56:00.567 に答える