каскадное сохранение в EF 4.1 не сохраняется - PullRequest
0 голосов
/ 21 февраля 2012

Сначала я пытаюсь сохранить каскад в коде 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; }


}

когда я пытаюсь сохранить пользователя, заполнив роль пользователя внутри него. это дает ошибку.

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_User_UserRole". Конфликт произошел в базе данных "х", таблица «dbo.User», столбец «UserId». Заявление было прекращено.

using (Database database = new Database())
{                
      database.User.Add(user);
      database.SaveChanges();  //it is giving error here.
}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Необходимо настроить сопоставление общего первичного ключа. В противном случае 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();
}
0 голосов
/ 21 февраля 2012

Я попытался воспроизвести ошибку следующим образом, однако это удалось

    using (var db = new MyContext())
    {
        var user = new User { UserRole = new UserRole { RoleID = 1, UserId = 1 } };
        db.Users.Add(user);
        db.SaveChanges();
    } 

Можете ли вы разработать свой код более подробно, чтобы получить ту же ошибку?

...