I use model first.
entity:
class User
{
Guid UserId{get;set;}
Guid RefererUserId {get;set;}
User RefereUser {get;set;}
}
Datacontext:
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; }
}
I initilize database:
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();
I get error:
The INSERT statement conflicted with the FOREIGN KEY SAME TABLE
constraint “User_ReferrerUser”. The conflict occurred in database
“Kamikaze”, table “dbo.Users”, column ‘UserId’. The statement has been
terminated.
What am I doing wrong?
Try making
RefererUserIdnullable (i.e.Guid?, notGuid). Otherwise, it would not be possible to insert the first user.You also need to change
HasRequiredtoHasOptionalto make the model aware of the fact that there may not be aRefererUser.See this answer for details on setting up optional links in code first.