Hap*_*per 4 api entity-framework .net-core db-first ef-core-3.0
我正在使用现有系统并将其更新为 .NET Core、Web API 和 EF Core。
现有系统有2张表:
虽然ParentId存在于子表中,但没有外键引用,但我希望在查询父表时能够使用 include 。我要求不要添加 FK 作为删除的一部分,他们将 -ve 值放入parentId列中。通过这种方式,他们可以将其恢复,并以这种方式构建遗留系统。
现在,在数据库优先迁移中,如何在没有 fk 的情况下指定导航属性,以便我的 EF Core 发挥关系作用;或者至少将它们一起归还。添加可为空的外键不是一个选项,因为在添加 -ve 值时它会破坏系统。
我确实建议完全清理数据库并删除 -ve 值,但这涉及大量测试并且没有可交付成果。长话短说,如何在数据库首次迁移中添加没有外键的导航属性?
我尝试在模型中添加集合和虚拟条目,但迁移后它被覆盖。我根据本文档在模型构建器上使用 HasMany 添加了此内容 - https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs= Fluent-api%2Cfluence-api-simple-key% 2C单键
但脚手架覆盖了我的导航属性
我找到了这个问题的答案。
在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在新文件中扩展部分类并在其中添加导航属性。
public partial class Packcomponent
{
public Pack Pack { get; set; }
}
public partial class Pack
{
public List PackComponent { get; set; }
}Run Code Online (Sandbox Code Playgroud)这样,在脚手架上,它不会覆盖自定义导航属性,我还可以使用此属性来执行 .Include() 等 EF 操作,并保存相关实体。真是太棒了!!
| 归档时间: |
|
| 查看次数: |
8360 次 |
| 最近记录: |