I'm trying create database using EF Code First method.
I have 3 tables with relationships.
+--------+ +---------+
| Users | | Groups |
+--------+ +---------+
| | -----------> | |
|________| |_________|
| |
| +--------------+ |
+---> |Group Messages| <---+
+--------------+
| |
|______________|
Arrows means cascade delete direction.
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; }
}
PK and FK defined with Fluent API.
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);
While creating model it throws System.Data.SqlClient.SqlException
in EntityFramework.dll
.
Message:
Introducing FOREIGN KEY constraint 'FK_dbo.DBGroupMessages_dbo.DBUsers_OwnerID' on table 'DBGroupMessages' may cause cycles or multiple cascade paths.
Google didn't help me -_-