我正在尝试使用EF Code First方法创建数据库。
我有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);
在创建模型,可以抛出System.Data.SqlClient.SqlException
在EntityFramework.dll
。
信息:
Introducing FOREIGN KEY constraint 'FK_dbo.DBGroupMessages_dbo.DBUsers_OwnerID' on table 'DBGroupMessages' may cause cycles or multiple cascade paths.
Google帮不了我-_-
与调用WillCascadeOnDelete(false)相比,它在另一个表上引发异常。FK约束位于DBGroupMessages表上。我对Fluent API的语法不是很熟悉,但是您应该在Stack Overflow上找到一些很好的示例。
例如这个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句