gpt4 book ai didi

c# - 首先使用 EF 代码禁用级联删除不起作用?

转载 作者:行者123 更新时间:2023-11-30 18:31:15 25 4
gpt4 key购买 nike

我有以下类,并且我已经使用 EF Code-first 创建了数据库表。但是,我发现删除级联打开并尝试将其删除。

public class Category
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[MaxLength(100)]
public string Title { get; set; }

public virtual ICollection<Event> Events { get; set; }
}

public class Event
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[ForeignKey("Category")]
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}

并且我在 DbContext 类中添加了以下代码。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Use singular table names
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
Database.SetInitializer<MyContext>(null);

modelBuilder.Entity<Category>()
.HasMany(c => c.Events)
.WithRequired()
.HasForeignKey(e => e.CategoryId)
.WillCascadeOnDelete(false);
}

但是,生成的迁移代码会生成两个 AddForeignKey 状态,一个带有 cascadeDeletion,另一个没有。

AddForeignKey("dbo.Event", "CategoryId", "dbo.Category", "Id");
AddForeignKey("dbo.Event", "CategoryId", "dbo.Category", "Id", cascadeDelete: true);
CreateIndex("dbo.Event", "CategoryId");
CreateIndex("dbo.Event", "CategoryId");

最佳答案

.WithRequired() 调用你使用 configures the relationship to be optional:required without a navigation property on the other side of the relationship这样就会产生一个 AddForeignKey 调用。

然后您有一个尚未在 FluentAPI 中配置的 Category 导航属性,因此 EF 会生成另一个使用默认配置的 AddForeignKey 调用。

尝试使用 WithRequired 的覆盖 configures the relationship to be optional:required with a navigation property on the other side of the relationship

modelBuilder.Entity<Category>()
.HasMany(c => c.Events)
.WithRequired(e => e.Category)
.HasForeignKey(e => e.CategoryId)
.WillCascadeOnDelete(false);

关于c# - 首先使用 EF 代码禁用级联删除不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com