【问题标题】:C# add a Table<T> into an existing DataContext InstanceC# 将 Table<T> 添加到现有的 DataContext 实例中
【发布时间】:2010-12-01 00:05:48
【问题描述】:

是否可以将Table&lt;T&gt; 动态添加到 LinqToSQL 中现有的 DataContext Insance 中?

这是我的情况: 我有几个使用 [Test] 属性声明为表的类,我想允许用户在运行时创建相应的 SQL Server 表。我知道如果我继承 DataContext 类,我可以添加成员 表客户; 在类中,它将自动在后端数据库中创建这样的表。 但是,问题是我是否可以在运行时将 Table 添加到 DataContext 类中,该类可以帮助我创建对应于 T 的对应 SQL Server Table。

【问题讨论】:

  • 什么意思?将表添加到数据库?添加已经存在的数据库表的表示?添加一个仅在内存中的 Table 对象?

标签: c# linq-to-sql datacontext


【解决方案1】:

我认为这是不可能的。 Linq2Sql 从您的属性中读取元信息并将它们存储在缓存中 - 对于您的上下文的所有实例。

您唯一的机会是在内存中生成这些类,然后将它们发送到 new AppDomain。听起来很难,但事实并非如此。但是你想如何访问这些类?反射?

【讨论】:

    【解决方案2】:

    你可以调用 GetTable();在数据上下文上。它会在那个时候读取 T 上的属性。

    【讨论】:

      【解决方案3】:

      绝对可以将运行时生成的表添加到 dbml。如果您在文本编辑器中打开 dbml 文件,您可以看到 dbml 包含列定义。在运行时,您可以使用新表字段动态生成此文件,并将此 dbml 添加到.csproj 项目文件中。这将自动生成设计器类。

      <Table Name="dbo.VijaysToDos" Member="VijaysToDos">
          <Type Name="VijaysToDo">
            <Column Name="id" Type="System.Int32" DbType="Int NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
            <Column Name="column1" Type="System.String" DbType="VarChar(255)" CanBeNull="true" />
            <Column Name="column2" Type="System.String" DbType="VarChar(255)" CanBeNull="true" />
            <Column Name="column3" Type="System.String" DbType="VarChar(255)" CanBeNull="true" />
            <Column Name="last_Updated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
          </Type>
      </Table>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        相关资源
        最近更新 更多