我正在尝试使用EF Code First方法创建数据库。FOREIGN KEY可能导致周期或多个级联路径异常
我有3个关系表。
+--------+ +---------+
| Users | | Groups |
+--------+ +---------+
| | -----------> | |
|________| |_________|
| |
| +--------------+ |
+---> |Group Messages| <---+
+--------------+
| |
|______________|
箭头表示级联删除方向。
public DBUser()
{
GroupMessages = new Collection<DBGroupMessage>();
Groups = new Collection<DBGroup>();
}
public Guid Id { get; set; }
public virtual ICollection<DBGroupMessage> GroupMessages { get; set; }
public virtual ICollection<DBGroup> Groups { get; set; }
public class DBGroup
{
public DBGroup()
{
GroupMessages = new Collection<DBGroupMessage>();
}
public Guid Id { get; set; }
[Required]
public Guid OwnerID { get; set; }
public DBUser Owner { get; set; }
public virtual ICollection<DBGroupMessage> GroupMessages { get; set; }
}
public class DBGroupMessage
{
public DBGroup Group { get; set; }
[Required]
public Guid GroupID { get; set; }
public Guid Id { get; set; }
public DBUser Owner { get; set; }
[Required]
public Guid OwnerID { get; set; }
}
使用Fluent API定义PK和FK。
modelBuilder.Entity<DBGroup>().HasKey(t => t.Id);
modelBuilder.Entity<DBGroup>().HasRequired(t => t.Owner).WithMany(t => t.Groups);
modelBuilder.Entity<DBGroupMessage>().HasKey(t => t.Id);
modelBuilder.Entity<DBGroupMessage>().HasRequired(t => t.Owner).WithMany(t => t.GroupMessages);
modelBuilder.Entity<DBGroupMessage>().HasRequired(t => t.Group).WithMany(t => t.GroupMessages);
modelBuilder.Entity<DBUser>().HasKey(t => t.Id);
modelBuilder.Entity<DBUser>().HasMany(t=>t.GroupMessages).WithRequired(t=>t.Owner).WillCascadeOnDelete(false);
在创建模型,可以抛出EntityFramework.dll
System.Data.SqlClient.SqlException
。
消息:
Introducing FOREIGN KEY constraint 'FK_dbo.DBGroupMessages_dbo.DBUsers_OwnerID' on table 'DBGroupMessages' may cause cycles or multiple cascade paths.
谷歌没有帮助我-_-
我明白问题,但不明白解决这个问题的方法。 GroupMessages(表中最后一个代码字符串)的表DBUser中已禁用级联更新。 – SUDALV