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