在EF 4.1上级联保存未保存

时间:2012-02-21 06:19:36

标签: c# sql-server entity-framework entity-framework-4.1

我首先尝试在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.
}

有什么想法吗?

2 个答案:

答案 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();
    } 

您能否详细说明您的代码以获得相同的错误?