我首先尝试在EF 4.1代码中保存级联。
[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; }
}
当我尝试通过在其中填充userrole来保存用户时。这是错误的。
INSERT语句与FOREIGN KEY约束冲突 “FK_User_UserRole”。冲突发生在数据库“x”,表中 “dbo.User”,列'UserId'。声明已经终止。
using (Database database = new Database())
{
database.User.Add(user);
database.SaveChanges(); //it is giving error here.
}
有什么想法吗?
答案 0 :(得分:1)
您需要配置共享主键映射。否则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();
}
答案 1 :(得分:0)
我尝试重现错误如下,但它成功了
using (var db = new MyContext())
{
var user = new User { UserRole = new UserRole { RoleID = 1, UserId = 1 } };
db.Users.Add(user);
db.SaveChanges();
}
您能否详细说明您的代码以获得相同的错误?