【发布时间】:2020-03-15 01:51:25
【问题描述】:
我正在创建一个包含以下组件的新 .NET Core 应用程序:
- .NET Core 3.0 Web API for api
- 用于 Web UI 的 .NET Core Razor 页面
- .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