在运行时确定Linq.Table <t>的T.

时间:2017-01-06 11:35:10

标签: c# linq linq-to-sql

我有两个结构相同的表,它们存在于两个独立的数据库中。两个数据库对象都继承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 { }
}

0 个答案:

没有答案