Необходимо настроить сопоставление общего первичного ключа. В противном случае EF не сможет правильно упорядочить операторы вставки. В вашем случае сначала необходимо вставить запись User
, а затем вставить UserRole
с сгенерированным первичным ключом User
.
[Table("User")]
public class User
{
[Key]
public Int64 UserId { get; set; }
public virtual UserRole UserRole { get; set; }
}
[Table("UserRole")]
public class UserRole
{
[Key,Column(Order = 0)]
public int RoleID { get; set; }
[Key,Column(Order = 1)]
public Int64 UserId { get; set; }
public virtual User User { get; set; }
}
В вашем OnModelCreating
методе
modelBuilder.Entity<UserRole>().HasRequired(r => r.User)
.WithOptional(u => u.UserRole);
Тогда
var user = new User { UserRole = new UserRole() };
using (Database database = new Database())
{
database.User.Add(user);
database.SaveChanges();
}