gpt4 book ai didi

entity-framework - 在 EF Core 中添加没有外键的导航属性,使用 .NET Core Web API 进行数据库优先迁移

转载 作者:行者123 更新时间:2023-12-05 02:07:48 25 4
gpt4 key购买 nike

我正在使用现有系统并将其更新为 .NET Core、Web API 和 EF Core。

现有系统有2张表:

  • 父表:Id、name等。
  • 子表:Id、ParentId、name等。

虽然ParentId在子表中存在,但是没有外键引用,但是我希望在查询父表的时候能够使用include。我已要求不要添加 FK 作为删除的一部分,他们将 -ve 值放入 parentId 列。这样他们就可以把它带回来,并以这种方式构建遗留系统。

现在,在 db-first 迁移中,我如何在没有 fk 的情况下指定导航属性,以便我的 EF Core 发挥关系;或者至少将它们一起归还。添加可为空的外键不是一个选项,因为它会在添加 -ve 值时破坏系统。

我确实建议完全清理数据库并删除 -ve 值,但这涉及大量测试且无法交付。那么长话短说如何在数据库首次迁移中添加没有外键的导航属性?

我尝试在模型中添加集合和虚拟条目,但在迁移后它被覆盖了。我已根据此文档 - https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key 在模型构建器上使用 HasMany 添加了此内容

但是脚手架覆盖了我的导航属性

最佳答案

我找到了答案。

在 EF core 3.x 中,DBFrist 脚手架创建的 dbcontext 都是分部类。所以我做了以下事情:1. 上下文类的新部分类 - 在这里我使用 OnModelCreatingPartial() 方法添加了导航属性的关系。下面的例子

public partial class dbContext : DbContext
{
partial void OnModelCreatingPartial(ModelBuilder builder)
{
builder.Entity<Packcomponent>()
.HasOne(p => p.Pack)
.WithMany(b => b.PackComponent)
.HasForeignKey(p => p.PackId);
}
}
  1. 在新文件中扩展分部类并在其中添加导航属性。


    public partial class Packcomponent
    {
    public Pack Pack { get; set; }
    }
    public partial class Pack
    {
    public List PackComponent { get; set; }
    }

这种方式在搭建脚手架时不会覆盖自定义导航属性,我也可以使用此属性执行 .Include() 等 EF 操作并保存相关实体。太棒了!!

关于entity-framework - 在 EF Core 中添加没有外键的导航属性,使用 .NET Core Web API 进行数据库优先迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471100/

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