【发布时间】:2021-08-12 22:56:18
【问题描述】:
我正在尝试设置模型构建器级联属性,但语法不正确。
简单的数据库:
我有一堂课(ReqForBetaReader):
public class ReqForBetaReader
{
public ReqForBetaReader()
{
Tags = new List<TagForReqBeta>();
}
public Guid Id { get; set; }
public string Title { get; set; }
public string Synopsis { get; set; }
public int WordCount { get; set; }
public Guid AuthorId { get; set; }
public virtual User Author { get; set; }
public DateTime UpdatedOn { get; set; }
public virtual ICollection<TagForReqBeta> Tags { get; set; }
}
我有我的 TagForReqBeta 课程
public class TagForReqBeta
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public Guid ReqForBetaReaderId { get; set; }
public virtual ReqForBetaReader ReqForBetaReader { get; set; }
[Required]
public Guid UserId { get; set; }
public virtual User User { get; set; }
public DateTime AddedOn { get; set; }
}
所以一个 ReqForBeta 可以有多个标签。
当我运行 Update-Database 时,我感到很害怕:
Introducing FOREIGN KEY constraint 'FK_TagsOnRequestForBetaReaders_RequestsForBetaReaders_ReqForBetaReaderId' on table 'TagsOnRequestForBetaReaders' 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 or index. See previous errors.
我相信这意味着当我删除 ReqForBeta 时,我也应该删除所有 TagForReqBeta,但是我遇到了语法问题。有什么帮助吗?
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<ReqForBetaReader>()
.HasMany<TagForReqBeta>(x => x.Tags)
.WithOne<ReqForBetaReader>(x => x.ReqForBetaReaderId)
.OnDelete(DeleteBehavior.Cascade);
base.OnModelCreating(builder);
}
【问题讨论】:
-
这两个实体都与
User-ReqForBetaReader.Author和TagForReqBeta.User有关系,从而创建了从User到TagForReqBeta的“多级联路径”。您必须为这些关系中的至少一个关闭级联删除。
标签: entity-framework asp.net-core entity-framework-core