【发布时间】:2015-09-19 04:57:09
【问题描述】:
我有一个组模型/表:
namespace Project
{
#region Usings
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#endregion
[Table("Groups")]
public class Group
{
public Group()
{
this.Pk = Guid.NewGuid();
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Key]
[Required]
public Guid Pk
{
get;
set;
}
public virtual ICollection<Group> Parents
{
get;
set;
}
public virtual ICollection<Group> Children
{
get;
set;
}
public virtual ICollection<Document> Documents
{
get;
set;
}
...
}
一个组可以有许多组作为子组或父组,以及许多文档。
我在 Fluent API 中建立了这样的关系:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Group>()
.HasMany(e => e.Parents)
.WithMany(e => e.Children)
.Map(e =>
{
e.MapLeftKey("ParentPk");
e.MapRightKey("ChildPk");
e.ToTable("GroupMappings");
});
modelBuilder.Entity<Group>()
.HasMany(e => e.Documents)
.WithMany(e => e.Groups)
.Map(e =>
{
e.MapLeftKey("DocumentPk");
e.MapRightKey("GroupPk");
e.ToTable("DocumentMappings");
});
}
当我为这些模型生成 SQL 时,组和文档 (DocumentMappings) 之间的关系已 ON DELETE CASCASDE:
ALTER TABLE [dbo].[DocumentMappings] ADD CONSTRAINT [FK_dbo.DocumentMappings_dbo.Documents_GroupPk] FOREIGN KEY ([GroupPk]) REFERENCES [dbo].[Documents] ([Pk]) ON DELETE CASCADE
但是 GroupMappings 没有:
ALTER TABLE [dbo].[GroupMappings] ADD CONSTRAINT [FK_dbo.GroupMappings_dbo.Groups_ParentPk] FOREIGN KEY ([ParentPk]) REFERENCES [dbo].[Groups] ([Pk])
ALTER TABLE [dbo].[GroupMappings] ADD CONSTRAINT [FK_dbo.GroupMappings_dbo.Groups_ChildPk] FOREIGN KEY ([ChildPk]) REFERENCES [dbo].[Groups] ([Pk])
我的组(父/子)映射可能有什么问题导致 ON DELETE CASCADE 未“启用”?它是否与它是同一类型的引用有关?
免责声明:我看到一些帖子说这不能完成,因为您“不能在 SQL SERVER 中的自引用表上使用 CASCADE DELETE”。 (Entity Framework 6 Code-First cascade delete on self referencing entity)。在这种情况下,我使用的是映射表,所以应该不是这种情况。
【问题讨论】:
标签: c# entity-framework ef-fluent-api