我有两个结构相同的表,它们存在于两个独立的数据库中。两个数据库对象都继承DataContext类并共享一个公共接口,数据库中的每个表也是如此。问题是Linq.Table类需要一个类作为T,但我需要它作为一个接口,以便在运行时确定正确的表。下面是一些代码,我希望能解释这个问题
两个数据库对象共享的公共接口
interface ICommonDataContext
{
// Table <T> where T is a class
Table<ITable1> Table1 { get; }
}
两个数据库中同一个表共享的公共接口示例
public interface Table1
{
int Col1 { get; set; }
int Col2 { get; set; }
}
带有接口实现的自动生成的Region1DataContext代码
[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="MyDB")]
public partial class Region1DataContext : System.Data.Linq.DataContext
{
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
#region Extensibility Method Definitions
partial void OnCreated();
#endregion
public Region1DataContext() :
base(ConnectionString, mappingSource)
{
OnCreated();
}
public Region1DataContext(string connection) :
base(connection, mappingSource)
{
OnCreated();
}
public Region1DataContext(System.Data.IDbConnection connection) :
base(connection, mappingSource)
{
OnCreated();
}
public Region1DataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
base(connection, mappingSource)
{
OnCreated();
}
public Region1DataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
base(connection, mappingSource)
{
OnCreated();
}
public System.Data.Linq.Table<ITable1> Table1
{
get
{
return this.GetTable<ITable1>();
}
}
}
具有接口实现的Table1代码
[global::System.Data.Linq.Mapping.TableAttribute(Name="Table1")]
public partial class Table1
{
private int _Col1;
private int _Col2;
public Table1()
{
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Col1", DbType="Int")]
public int Col1
{
get
{
return this._Col1;
}
set
{
if ((this._Col1 != value))
{
this._Col1 = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Col2", DbType="Int")]
public int Col2
{
get
{
return this._Col2;
}
set
{
if ((this._Col2 != value))
{
this._Col2 = value;
}
}
}
}
其他部分类声明,包括接口实现
{
public partial class Region1DataContext : ICommonDataContext { }
public partial class Table1 : ITable1 { }
}