在实体框架中有两个表示同一表的类?



我正在尝试清理一些最初创建的实体框架数据上下文,没有任何命名约定。我想保留旧类,但也要同时提供新的、正确命名的类,以便不需要立即更改使用这些数据上下文的所有其他项目。我将使用数据注释将旧类标记为过时,以便它们不会用于任何新开发。只有类会被改变,数据库将永远被糟糕的命名所困扰。

当我基于一个表创建一个新类时,该表清理了所有命名,同时仍然保留代表表的旧类,我可以创建类,但是当我尝试使用任何一个时,我收到以下错误:

实体类型"Client"和"lu_Clients"不能共享表"lu_Clients",因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间的主键匹配。

我的丑陋班级:

[Obsolete("Use Client class instead")]
public class lu_Clients
{
[Key]
[Column("ClientsSeq")]
public int ClientsSeq { get; set; }
[Column("ClientsID")]
public string ClientsID { get; set; }
[Column("ClientsName")]
public string ClientsName { get; set; }
}

我清理过的班级:

[Table("lu_Clients")]
public  class Client
{
[Key]
[Column("ClientsSeq")]
public int Sequence { get; set; }
[Column("ClientsID")]
public string Id { get; set; }
[Column("ClientsName")]
public string Name { get; set; }
}

关于如何使两个类到同一个表概念工作的任何建议?或者有没有更好的方法来保持与过时和新的兼容性?

为什么需要同时保留两者? 我会重命名旧类中的每个字段以匹配新类(使用 VS 重命名功能以确保重命名所有有效字段),然后将旧类名重命名为新类名(这将产生冲突),但然后删除旧类。 现在所有代码都使用新类,而旧类不存在。

您能否使新类从表中继承,然后将lu_clients更改为直接从客户端类继承,有效地通过新类进行映射,直到不再需要旧的丑陋类?

最新更新