我有一个应用程序,它应该支持基于配置参数的两个版本的数据库。
问题是这些数据库的表中的类型之间存在一些细微差别。
例如,在旧数据库中,该字段的类型为tinyint
,现在为smallint
。
当我尝试使用新的.dbml
文件时,在尝试选择任何内容时,我会感到很可爱InvalidCastException
。
我需要两个不同的.dbml方案,它们具有相同的表和列名但不同的类型。 我想避免重复代码,如:
if (newDatabaseVersionFlag)
{
Data.DatabaseDataContext context = new Data.DatabaseDataContext(connectionString);
Data.Something item = context.Somethings.SingleOrDefault(e => e.Id == id);
item.Sth = (short)5;
item.Sth2 = "sample code";
}
else
{
Data2.DatabaseDataContext context2 = new Data2.DatabaseDataContext(connectionString);
Data2.Something item2 = context2.Somethings.SingleOrDefault(e => e.Id == id);
item2.Sth = (byte)5;
item2.Sth2 = "sample code";
}
还有更多代码而不是......
使它整洁干净的最佳方法是什么?
答案 0 :(得分:0)
您最好创建一个代理数据上下文。
问题是如果您有不同的数据类型,除非您使用var
,否则编译器将失败public class UseMeDataContext:System.Data.Linq.DataContext
{
...
}
UseMeDataContext db ;
if (newDatabaseVersionFlag)
{
db = ((System.Data.Linq.DataContext) new Data.DatabaseContext(connectionString));
}
else
{
db = ((System.Data.Linq.DataContext) new Data2.DatabaseDataContext(connectionString));
}
db.Something item2 = UseMeContext.Somethings.SingleOrDefault(e => e.Id == id);
item2.Sth = (TypeOf(item2.sth))5; // May or May not Need typing
item2.Sth2 = "sample code";