首页 > 解决方案 > 从数据库更新实体框架模型,自定义属性无法识别

问题描述

我只想问实体框架的一般问题。当我想从数据库更新我的模型或从数据库向模型添加新项目时,我丢失了所有自定义属性

在示例中

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
}

但是当我更新模型时,我会丢失自定义属性,每次我需要一次又一次地添加它

你有什么解决办法吗?

谢谢

标签: c#sqlasp.net-mvcentity-framework

解决方案


您需要使用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;} 
}

推荐阅读