SQlサーバーにいくつかのテーブルを設定しています。これらすべてを通常のLinqToSqlで使用するためにdbmlファイルに転送しました。
リンクされたテーブルではなく、テーブルの列のみを選択するようにコードのクラスを変更することは可能かどうか疑問に思っています
つまり、リンクされたテーブルプロパティのないメソッドにクラスを渡したい場合は、どうすればよいでしょうか。
詳細情報基本的に、context.SubmitChangesの代わりにSQLbulkCopyを使用するために作成した拡張機能を使用しようとしていますが、追加のプロパティが原因でマッピングの問題が発生します
匿名型を使用できることはわかっていますが、Extensionメソッドの利点が上書きされると思いました。もう1つのオプションは、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;
}
}