0

これが原因で EF エラーが発生する理由がわかりません: EF に保存するときに列名 'User_UserId' が無効です。

これが私のモデルです:

 [DataContract(IsReference = true)]
public class User
{
    [Key]
    [DataMember]
    public virtual Guid UserId { get; set; }

    [DataMember]
    public virtual string Username { get; set; }

    [DataMember]
    public virtual string Password { get; set; }

    [DataMember]
    public virtual string Email { get; set; }

    [DataMember]
    public virtual ICollection<FriendList> FriendLists { get; set; }
}

[DataContract(IsReference = true)]
public class FriendList
{
    [Key]
    [DataMember]
    public virtual Guid FriendListId { get; set; }

    [DataMember]
    [ForeignKey("User")]
    public virtual Guid UserId { get; set; }

    [DataMember]
    public virtual User User { get; set; }

    [DataMember]
    [ForeignKey("FriendUser")]
    public virtual Guid FriendUserId { get; set; }

    [DataMember]
    public virtual User FriendUser { get; set; }
}

基本的に、フレンドリストを持つユーザーとの 1 対多の関係です。

4

3 に答える 3

6

クラスには、タイプの2つのナビゲーションプロパティがあります。EFは、これらのどれが属しているかを把握できず、 3つのナビゲーションプロパティすべてに対して個別の1対多の関係を作成します。そのうちの1つにはデフォルトの外部キー名があります。UserFriendListUser.FriendListsUser_UserId

この規則を次のInverseProperty属性で上書きできます。

public class FriendList
{
    // ...

    [DataMember]
    [InverseProperty("FriendLists")]
    public virtual User User { get; set; }

    // ...
}

ここで、User.FriendListsFriendList.Userは同じ1対多の関係のエンドポイントでありFriendList.FriendUser、2番目の1対多の関係を定義します(ただし、Userクラスにエンドポイントはありません)。

于 2012-08-20T19:10:26.003 に答える
1

私は推測する:

[ForeignKey("UserId")]1)あなたの場合、属性 ForeignKey は asではなく asに設定する必要があります[ForeignKey("User")]

2) または、これらのクラスのいずれかがマップされていない場合は、[NotMapped] 属性を設定する必要があります。

于 2012-08-20T18:52:44.473 に答える