c# - 在实体框架中有两个代表同一个表的类?
问题描述
我正在尝试清理一些最初在没有任何命名约定的情况下创建的实体框架数据上下文。我想保留旧类,但同时也有新的、正确命名的类,这样使用这些数据上下文的所有其他项目就不需要立即更改。我将使用数据注释将旧类标记为已过时,以便它们不会用于任何新开发。只有类会被改变,数据库将永远被糟糕的命名所困扰。
当我基于一个表创建一个新类时,该表清理了所有命名,同时仍保留代表表的旧类,我可以创建类,但是当我尝试使用其中任何一个时,我得到以下错误:
实体类型“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 重命名功能来确保重命名所有有效字段),然后将旧类名重命名为新类名(这会产生冲突),然后删除老班。现在所有代码都在使用新类,而旧类不存在。
推荐阅读
- excel - 从 URL 读取 Excel
- c - 是否有从 glib 中的线程池加入线程的功能?
- c++ - 无法在我的 .cpp 文件中正确使用命名空间
- python - 熊猫 Python 问题
- c++ - uwebsockets 无法启动:libuv.c:-1: 错误:未定义对 `uv_is_closing' 的引用
- python - 有没有办法将类对象名称转换为与之关联的字符串?
- amazon-web-services - 仅向一位 IAM 用户授予对 Amazon S3 存储桶的访问权限
- laravel - 如何为数据透视表创建测试?
- wso2 - 如何更改 WSO2 3.2.0 APIM 的默认端口?
- firebase - firestore 更新地图字段