C# 신참. 아래 코드는 내 DB의 일부 필드를 업데이트하기 위해 몇 시간 씩 노력해 왔으며 행운없이 많은 구현을 시도했습니다.동적 LINQ - Entity Framework 6 - 동적 선택에 대한 레코드 업데이트
// Select all fields to update
using (var db = new Entities())
{
// dbFields are trusted values
var query = db.tblRecords
.Where("id == " + f.id)
.Select("new(" + string.Join(",", dbFields.Keys) + ")");
foreach (var item in query)
{
foreach (PropertyInfo property in query.ElementType.GetProperties())
{
if (dbFields.ContainsKey(property.Name))
{
// Set the value to view in debugger - should be dynamic cast eventually
var value = Convert.ToInt16(dbFields[property.Name]);
property.SetValue(item, value);
// Something like this throws error 'Object does not match target type'
// property.SetValue(query, item);
}
}
}
db.SaveChanges();
}
위의 코드를 실행해도 DB가 변경되지 않습니다. 분명히이 코드는 약간의 정리가 필요하지만 기본 기능을 작동 시키려고합니다. 내가해야 할 수도 있습니다 어떻게 든 '쿼리'로 다시 '항목'을 다시 적용하는 것입니다하지만 난 행운을 얻으려고 아무리 노력하고있어 내가 노력하고있어 난 항상 '대상이 일치하지 않는 대상 유형' .
이 비슷한 문제는 내가 동적 LINQ 쿼리를 사용하고 있으며 속성 이름을 직접 참조 할 수 없기 때문에 나에게 분명하지 않지만 다시 확인됩니다. https://stackoverflow.com/a/25898203/3333134
당신이 필요로하는이 '선택 이유는 무엇입니까 ("새 ...'있다면? 당신은'tblRecords'에서 엔티티를 가질'선택 '을 제거합니다. 변경하면 EF가 추적하는 변경 사항이 발생합니다. –