c# - 从数据库更新实体框架模型,自定义属性无法识别
问题描述
我只想问实体框架的一般问题。当我想从数据库更新我的模型或从数据库向模型添加新项目时,我丢失了所有自定义属性
在示例中
My Sql Table
Test
Id int
TestId int
EF creates model automatically
public class Test
{
public int Id {get;set;}
public int TestId {get;set;}
}
//I want to add custom property on class
public class Test
{
public int Id {get;set;}
public int TestId {get;set;}
public string TestName {get;set;} //I added custom property
}
但是当我更新模型时,我会丢失自定义属性,每次我需要一次又一次地添加它
你有什么解决办法吗?
谢谢
解决方案
您需要使用partial
关键字。部分类和方法(C# 编程指南)
EF 应该将partial
关键字添加到它创建的类中(如果没有,那么您需要弄清楚如何获取用于添加关键字的过程 - 通常通过编辑 .tt 文件)。然后,您可以创建一个具有相同类定义的单独 .cs 文件。在你的情况下:
public partial class Test
然后,C# 编译器会将这两个定义视为相同的定义并将它们“添加”在一起。如果您遵循一些简单的规则,这将有效。
- 两个定义必须相同并且包含 partial 关键字。
- 两者必须在同一个模块(.exe、.dll)中定义
- 两者都必须在同一个命名空间中定义。
通过这种方式,您拥有一个由 EF 维护的类定义和一个由您维护的类定义。EF 不会覆盖您的自定义属性。
您的课程将只是:
public partial class Test
{
public string TestName {get; set;}
}
推荐阅读
- json - 无法识别在 csv 文件中存储和使用的 json 请求正文的正确格式,以便在空手道场景中使用
- jquery - 如何在 jQuery 日期选择器中为禁用日期添加工具提示?
- vb.net - Vb.Net 2019 Windows 窗体应用程序无法在表单加载事件中连接到 Openoffice
- javascript - 使用 QuaggaJS 停止后如何启动相机
- d3.js - 在另一个过渡正在进行时开始一个过渡
- angular - 对组件的变化做出反应,避免使用 location.reload()
- powershell - 将输出转换为 CSV 和 Out-Grid
- .net - Tizen 手表表圈交互
- matlab - 在单独的回调函数中更新 GUI 弹出菜单
- html - 如何让 Box-Shadow 在另一个元素上方渲染?