外键约束
问题描述:
实体框架例外,我有一个简单的人外键约束
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场景的方式吗?
任何帮助表示赞赏。
答
您可以定义与级联关系删除模型建立假的,
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);
}
也许这将有助于。 http://stackoverflow.com/questions/851625/foreignkey-constraint-may-cause-cycles-or-multiple-cascade-paths – MStp