Обновите столбцы сущностей, просматривая список столбцов, используя LINQ - PullRequest
2 голосов
/ 30 августа 2011

Я могу получить список столбцов из таблицы, используя LINQ следующим образом:

OrderDataContext ctx = new OrderDataContext();
var cols = ctx.Mapping.MappingSource
                        .GetModel( typeof( OrderDataContext ) )
                        .GetMetaType( typeof( ProductInformation ) )
                        .DataMembers;

Это дает мне список столбцов, поэтому я могу сделать это:

foreach ( var col in cols )
{
    // Get the value of this column from another table
    GetPositionForThisField( col.Name );
}  

Так что все это работает, я могу перебирать список столбцов и извлекать значения для этих столбцов из другой таблицы (так как имена столбцов являются ключами в этой другой таблице), поэтому мне не нужно переключаться .. ..или много если ... тогда ...

Теперь вопрос:

После того, как я получу эти значения, как мне заполнить сущность, чтобы сохранить ее обратно? Я бы обычно так и делал:

ProductInformation info = new ProductInformation();
info.SomeField1 = val1;
info.SomeField2 = val2;

ctx.ProductInformation.InsertOnSubmit( info );
ctx.SubmitChanges();

Но как использовать тот же набор столбцов сверху, чтобы заполнить столбцы, итерируя по этому, когда нет такой вещи как:

info["field1"].Value = val1;

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 августа 2011

Вам нужно будет использовать отражение.Предполагая, что вы можете получить PropertyInfo из метаданных:

PropertyInfo property = GetPropertyForThisField(col.Name);
property.SetValue(info, val1, null);
0 голосов
/ 30 августа 2011

Просто извлеките объект, который вы хотите изменить, установите свойство и вызовите SubmitChanges. Нет необходимости создавать новый объект и вставлять его. Контекст отслеживает ваши измененные свойства и соответствующим образом генерирует оператор обновления. В вашем случае вы можете установить свойства с помощью отражения, а не вручную, поскольку вы читаете их из другой таблицы.

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