Исключение Entity Framework при ограничении внешнего ключа - PullRequest
1 голос
/ 19 сентября 2011

У меня есть простой человек

 public class Person
    {
        public virtual string Id { get; set; }
        public virtual string Name { get; set; }            
    }

И если один человек отправляет запрос в друзья кому-то другому, у меня есть эта модель

 public class FriendRequest
    {
        public int Id { get; set; }        
        public bool Accepted { get; set; }

        [Key, Column(Order = 1)]
        public string SenderId { get; set; }    
        public virtual Person Sender { get; set; }

        [Key, Column(Order = 2)]
        public string ReceiverId { get; set; }
        public virtual Person Receiver { get; set; }
    }

Сначала я использую код EF 4.1подход.Должны быть созданы две таблицы

People {Columns = "Id, Name"}

FriendRequests {Columns = "Id, SenderId, ReceiverId, Accepted"} 

с ограничениями внешнего ключа ...

Когда я пытаюсь добавить нового человека из моего контроллера, он жалуется

The database creation succeeded, but the creation of the database objects did not. 
See  InnerException for details.

InnerException:

Introducing FOREIGN KEY constraint 'FriendRequest_Sender' on table 
'FriendRequests' may cause cycles or multiple cascade paths. 
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify 
other FOREIGN KEY constraints.Could not create constraint.

Что я делаю не так?Я пропускаю какие-либо аннотации на моей модели?

Или это совершенно неверный способ обработки сценария отправки и получения запроса на добавление в друзья?

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Вы можете определить отношения с помощью каскадного удаления false при построении модели,

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

     modelBuilder.Entity<FriendRequest>().
      HasRequired(f=>f.Sender ).WithMany().HasForeignKey(f=>f.SenderId ).WillCascadeOnDelete(false);
      modelBuilder.Entity<FriendRequest>().
      HasRequired(f=>f.Receiver ).WithMany().HasForeignKey(f=>f.ReceiverId ).WillCascadeOnDelete(false);

     }
0 голосов
/ 19 сентября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...