我正在实现一个导入工具,它从文件中读取数据并将它们存储到数据库中。我们有两个不同版本的数据库:“完整”版和“轻量级”版。轻量版少了一个表,另外还有四个引用缺失表的表也没有这个外键列。
我已经实现了使用 Linq-to-Sql 将数据导入“完整”数据库的工具,我想重新使用导入到轻量级数据库版本的逻辑。
我的想法是dynamic
为此目的使用对象。
所以我.dbml
在我的项目中添加了两个不同的 Linq-To-SQL 文件,并用各自的表填充它们。我将它们设置为使用不同的名称空间以避免名称冲突。
初始化DbContext
动态变量的(至少我在这里没有得到任何编译器错误)没有问题:
bool _usefirstdb;
dynamic _db;
if (_usefirstdb)
{
_db = new FirstDBDataContext (string.Format(SqlScripts.SqlServerConnectionString, args[1], args[2]));
}
else
{
_db = new SecondDBDataContext(string.Format(SqlScripts.SqlServerConnectionString,args[1], args[2]));
}
但我在针对这些对象运行 LINQ 查询时遇到问题:
var query = from inst in _db.Instances
where inst.Name.Equals(args[3])
select inst.Id;
这是因为inst
编译器无法确定的类型(并且不是dynamic
)。
有没有办法克服这个问题?我知道 C# 是静态类型的,但我没有看到任何其他方式来重用我的代码......