【问题标题】:How to refresh Entity Framework Core DbContext but keep my property decorations?如何刷新 Entity Framework Core DbContext 但保留我的属性装饰?
【发布时间】:2020-03-15 01:51:25
【问题描述】:

我正在创建一个包含以下组件的新 .NET Core 应用程序:

  1. .NET Core 3.0 Web API for api
  2. 用于 Web UI 的 .NET Core Razor 页面
  3. .NET Core 类库 - 一个用于实用程序,一个用于模型

我正在为模型使用实体框架核心。我通常讨厌 ORM 工具,但时间对于这个项目来说至关重要,所以我没有太多选择。我不得不说,考虑到所有因素,它非常可靠。

我遇到的一个问题是我必须使用 JsonIgnore 属性来装饰我的模型的一些属性,例如:

[JsonIgnore]
public virtual ICollection<LabOrder> LabOrders { get; set; }

这样做的原因是,否则,当我序列化对象(为了从 api 返回它)时,.NET 会抛出关于太多嵌套级别的异常,或者由于父-子-回-父关系而引发的异常这将导致永无止境的递归发生。所以,一切都很好,JsonIgnore 属性正是我所需要的。

但是,这是我的问题。我已经经历了在我需要的任何地方装饰这些属性的麻烦,并完成了第一轮开发和测试。我需要对我的数据库模型进行一些调整;我已经完成了……现在是时候刷新 EF Core dbcontext。在创建 new 属性或方法时,我可以使用部分类来保留我对模型所做的任何“自定义”更改,但我不知道如何在这里完成。

所以:是否有可能保留我的属性装饰并仍然使用 Scaffold-dbcontext 命令刷新模型?我过去曾成功使用过该命令,但现在我需要以确保我不会丢失我的更改。

【问题讨论】:

  • 如果您需要自定义装饰您的模型,您最好使用代码优先方法而不是数据库优先方法?或者将前端类与数据类分开
  • 这是代码优先方法的一个好点。我想我是老派,所以我更喜欢坚持使用 db-first。我可以在我想的 EF 模型之上创建另一个层 - 尽管那时我觉得我失去了开始使用 EF 的一些好处。不过,这是个好主意。谢谢!
  • 您好,Buckles,欢迎来到 SO。一个 hacky 解决方案是创建一个单独的项目,该项目仅连接到数据库,然后执行脚手架命令并手动复制新字段。
  • 感谢 EJD。我认为这看起来正是我所需要的,但我尝试了它,不幸的是它不尊重 MetadataType 类中的 [JsonIgnore] 注释。

标签: c# .net-core entity-framework-core asp.net-core-webapi dbcontext


【解决方案1】:

我相信我已经确定这实际上是不可行的。

https://forums.asp.net/t/2139531.aspx?Loading%20MetaData%20from%20Partial%20Class%20in%20Aspnet%20Core

我已经阅读了所有可以在此处找到的内容、论坛和 MS 文档。它应该工作,但是在 ModelMetadataClass 中根本不尊重装饰。做到这一点的唯一方法是实现另一个层,例如视图模型并在那里处理它。

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多