【问题标题】:Entity Framework model update from database, custom properties is not recognising从数据库更新实体框架模型,自定义属性无法识别
【发布时间】:2018-06-01 08:09:31
【问题描述】:

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

在示例中

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
}

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

你有什么解决办法吗?

谢谢

【问题讨论】:

  • 您是否进行了迁移以更新您的数据库架构?
  • 不,我不使用那个@Atlasmaybe
  • 那你用什么?
  • 您阅读我的问题了吗?正如我在那里所说,当我想添加新表或更新任何 sp 或添加新 sp 时,我正在使用数据库函数中的更新模型,所以我丢失了所有自定义属性 @Atlasmaybe
  • 光顾在这里对你没有帮助......无论如何,你的问题不是很清楚,这就是为什么我问你在使用什么......但也许你应该从这里开始:docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/…或者这里如果你不使用 aspnet core docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/…

标签: c# sql asp.net-mvc entity-framework


【解决方案1】:

您需要使用partial 关键字。 Partial Classes and Methods (C# Programming Guide)

EF 应该将 partial 关键字添加到它创建的类中(如果没有,那么您需要弄清楚如何获取用于添加关键字的过程 - 通常通过编辑 .tt 文件)。然后,您可以创建一个具有相同类定义的单独 .cs 文件。在你的情况下:

public partial class Test

然后,C# 编译器会将这两个定义视为相同的定义,并将它们“相加”在一起。如果您遵循一些简单的规则,这将有效。

  • 两个定义必须相同并且包含部分关键字。
  • 两者必须在同一个模块(.exe、.dll)中定义
  • 两者必须在同一个命名空间中定义。

通过这种方式,您拥有一个由 EF 维护的类定义和一个由您维护的类定义。 EF 不会覆盖您的自定义属性。

你的班级将是:

public partial class Test
{
    public string TestName {get; set;} 
}

【讨论】:

  • 亲爱的@Philip Smith 你让我很开心,这真的是解决我问题的好方法。我终于节省了 15 分钟 :) 谢谢
猜你喜欢
  • 2011-04-28
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多