【发布时间】:2011-08-26 14:00:19
【问题描述】:
我正在开发一个使用旧系统数据库的新应用程序。数据库中的每个表(大约有 600 个)都有一个“已删除”列来标记该项目是否应显示给用户。在我的通用存储库中,我需要添加 LINQ 表达式来过滤掉所有带有 Deleted == 1/True 的项目。
我遇到的问题是“已删除”列在表中具有不同的数据类型。
它是任何给定表中的 tinyint、smallint 或 bit。从理论上讲,这应该不是什么大问题,因为数据将始终存储为 1 或 0(嗯,应该是,我想,但无论哪种方式都是某种数字),它们可以转换为任何特定的上面提到的类型。我只是不确定如何和/或在哪里进行投射。
我创建了一个接口,它强制所有实体公开此属性,但由于类型不同,每个具有不同数据类型的实体都会导致问题。我希望(尽管已经知道它不起作用)我可以将接口更改为“对象”或“动态”,这仍然会导致编译时错误,因为 EDMX 模型正在创建数据模型类。如果这不能解决问题,我不想花太多时间在 T4 模板中编写代码。
当我将 EDMX 模型的实体属性更改为遵循特定数据类型时,我收到映射错误(“成员映射特定无效。成员 'Deleted' 的类型 'Edm.Byte[]' in type 'MyEntity' 与 'SqlServer.bit[]' 不兼容 ....)
我怀疑我是否能够更改表中的数据类型,因为有许多不同的应用程序使用这个数据库,我相信它会在某个地方引起问题。
有没有其他人遇到过类似的情况并提出了可行的解决方案?
[编辑] 我将采用 Baldy 推荐的解决方案,并创建一个视图来包装表格并创建一个附加列,该列将用于将列转换为位。
【问题讨论】:
标签: generics repository-pattern entity-framework-4.1