我在 SQl 服务器中设置了许多表,我已将所有这些表转移到 dbml 文件中以供正常的 LinqToSql 使用。
我想知道是否可以将代码中的类更改为仅选择表的列而不选择链接表
即,如果我想将类传递给没有链接表属性的方法,我将如何去做
更多信息本质上我正在尝试使用我编写的扩展以使用 SQLbulkCopy 而不是 context.SubmitChanges 但由于额外的属性而遇到映射问题
我意识到我可以使用匿名类型,但认为这会覆盖扩展方法的任何好处。另一种选择是更改 ToDataTable 扩展。
public static void SqlBulkInsert<T>(this IEnumerable<T> source, string connectionString, string tableName)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
var bulkCopy = new SqlBulkCopy(conn) {DestinationTableName = tableName};
conn.Open();
var item = source.ToDataTable();
bulkCopy.WriteToServer(item);
conn.Close();
}
}
public static DataTable ToDataTable<T>(this IEnumerable<T> source)
{
using (var dt = new DataTable())
{
var toList = source.ToList();
for (var index = 0; index < typeof(T).GetProperties().Length; index++)
{
var info = typeof(T).GetProperties()[index];
dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}
for (var index = 0; index < toList.Count; index++)
{
var t = toList[index];
var row = dt.NewRow();
foreach (var info in typeof(T).GetProperties())
{
row[info.Name] = info.GetValue(t, null);
}
dt.Rows.Add(row);
}
return dt;
}
}