Структура цикла для представления данных с использованием addwithValue - PullRequest
0 голосов
/ 04 июля 2010

Мои знания LINQ в порядке. Мне нужен цикл или другой метод для выполнения метода ADO.NET (см. foreach loop)

public bool AccessProcess(string sp, ListDictionary ld, CommandType cmdType)
{
    SqlConnection con = new SqlConnection(
        WebConfigurationManager.ConnectionStrings["conn"].ToString());
    SqlCommand cmd = new SqlCommand(sp, con);
    try
    {
        con.Open();
        cmd.CommandType = cmdType;
        foreach (string ky in ld.Keys)
        {
            cmd.Parameters.AddWithValue(ky, ld[ky]);
        }
        cmd.ExecuteNonQuery();
    }
    finally
    {
        con.Dispose();
        cmd.Dispose();
    }
    return true;
}

Мне нужно:

foreach (string ky in ld.Keys)
    yourObject.SetPropertyValue(ky, ld[ky]);

Как я могу это сделать? Могу ли я использовать LINQ-to-SQL?

Можете ли вы дать чистый образец, как

using (var contex = new DataclassContext())
foreach (string ky in ld.Keys)
{
    contex.Parameters.AddWithValue(ky, ld[ky]);
}
contex.SubmitChanges();

1 Ответ

1 голос
/ 04 июля 2010

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, а не использовать объект сущности непосредственно в коде, который в настоящее время генерирует эти пары ключ / значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...