Linq to SQL отображает классы данных (часто называемые «сущностями») в таблицу базы данных SQL.
Итак, сначала вам нужно использовать конструктор Linq-> SQL для генерации этих классов данных и объект DataContext, который сопоставит эти классы с базой данных и из нее.
Вы обычно определяете это отображение в интерфейсе конструктора Linq to SQL в Visual Studio. Этот пользовательский интерфейс позволяет вам визуально редактировать файл .dbml и, по сути, определяет отображение между объектами вашего объекта CLR и таблицей базы данных SQL.
См. В этой статье MSDN пример того, как добавить новый класс Linq to SQL.
Как только вы определили этот класс, вы можете создать новый экземпляр этого класса и значения его свойств. Эти значения свойств отображаются на столбцы в таблице базы данных SQL. Затем вы передаете этот объект в класс DataContext, сгенерированный LINQ to SQL, чтобы добавить новую строку в таблицу в базе данных.
Итак, вы бы сделали что-то вроде этого:
For a database table with columns "ColumnA", "ColumnB" and "ColumnC"
var myEntity = new EntityObject { ColumnA = "valueA", ColumnB = "valueB", "ColumnC" = "valueC" };
DataContext.InsertOnSubmit(myEntity);
DataContext.SubmitChanges();
Это вставит новую строку в базу данных с указанными значениями столбца.
Теперь, если вы не хотите вручную писать код для записи в ColumnA, ColumnB и т. Д., Вы можете использовать отражение для записи в соответствующие свойства объекта:
Например, с экземпляром сущности myEntity:
var properties = myEntity.GetType().GetProperties();
foreach (string ky in ld.Keys)
{
var matchingProperty = properties.Where(p => p.Name.Equals(ky)).FirstOrDefault();
if (matchingProperty != null)
{
matchingProperty.SetValue(myEntity, ld[ky], null);
}
}
Использование отражения не дает наилучшей производительности, поэтому я хотел бы задать вопрос, почему вы даже хотите отобразить массив ключей и значений в сущность linq-> sql, а не использовать объект сущности непосредственно в коде, который в настоящее время генерирует эти пары ключ / значение.