C#将Table <t>添加到现有的DataContext实例</t>中

时间:2009-09-24 06:47:18

标签: c# linq-to-sql datacontext

我是否有可能动态地将Table<T>添加到LinqToSQL中的现有DataContext Insance中?

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你可以调用GetTable&lt; T&gt;();在DataContext上。它将在那时读取T上的属性。

答案 2 :(得分:0)

绝对可以将在运行时生成的表添加到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>