0

最初にモデルを使用します。

実在物:

class User
{
Guid UserId{get;set;}
Guid RefererUserId {get;set;}
User RefereUser {get;set;}
}

データコンテキスト:

public class DataContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            modelBuilder.Entity<User>()
                .HasRequired(x => x.ReferrerUser)
                .WithMany()
                .HasForeignKey(x => x.ReferrerUserId).WillCascadeOnDelete(false);

        }
 public DbSet<User> Users { get; set; }
}

データベースを初期化します:

MembershipCreateStatus Status;
Membership.CreateUser("Demo", "123456", "demo@demo.com", null, null, true, out Status);

Roles.CreateRole("Admin");
Roles.AddUserToRole("Demo", "Admin");
DataContext db = new DataContext();
var a = db.Users.Where(x => x.Email == "demo@demo.com").FirstOrDefault();
a.MoneyRUB = 100;
a.MoneyUSD = 100;
db.SaveChanges();

エラーが発生します:

INSERTステートメントがFOREIGNKEYSAMETABLE制約「User_ReferrerUser」と競合していました。データベース「Kamikaze」、テーブル「dbo.Users」、列「UserId」で競合が発生しました。ステートメントは終了されました。

私は何が間違っているのですか?

4

1 に答える 1

0

nullable にしてみてくださいRefererUserId(つまりGuid?、 ではありませんGuid)。そうしないと、最初のユーザーを挿入できません。

また、 が存在しない可能性があるという事実をモデルに認識させるために、に変更HasRequiredする必要があります。HasOptionalRefererUser

最初にコードでオプションのリンクを設定する方法の詳細については、この回答を参照してください。

于 2012-05-23T14:45:31.207 に答える