使用取决于参数

使用取决于参数

问题描述:

DBML方案之一,我应该支持的基础上配置参数数据库两个版本的应用程序。 问题是这些数据库的表中的类型之间存在一些细微的差异。 例如,在旧数据库中,该字段的类型为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"; 
} 

而且还有很多比这更多的代码...

是什么让它整洁的最佳方式?

您将最好创建一个代理数据上下文。

的问题是,如果你有不同的数据类型,你的编译器,除非您使用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"; 
+0

我试图做同样的事情,但失败了'Data.DatabaseContext.Something'来自不同类'Data2.DatabaseContext.Something',所以我不能将它们分配给一个公共变量。我使用的是.NET 3.5,因此这里没有'dynamic'关键字 – Adassko 2014-09-25 08:31:25

+0

是不同类型的类吗?他们有 – Traci 2014-09-25 08:34:19

+0

他们如果刚才编辑我的代码,以反映System.Data.Linq.DataContext会自动'MSLinqToSQLGenerator'工具 – Adassko 2014-09-25 08:38:42