外键约束

问题描述:

实体框架例外,我有一个简单的人外键约束

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. 

我在做什么错?我是否在模型上缺少任何注释?

或者这是一个完全不正确的处理好友请求send-receive-accept场景的方式吗?

任何帮助表示赞赏。

+0

也许这将有助于。 http://stackoverflow.com/questions/851625/foreignkey-constraint-may-cause-cycles-or-multiple-cascade-paths – MStp

您可以定义与级联关系删除模型建立假的,

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); 

    }