У меня были проблемы с довольно известной «Явная конструкция типа сущности '##' в запросе не разрешена». ошибка.
Теперь, насколько я понимаю, это существует, потому что, если бы было разрешено явное построение этих объектов, отслеживание изменений в базе данных было бы очень сложным.
Поэтому я спрашиваю: что представляет собой явное создание этих объектов? Другими словами:
Почему я могу сделать это:
Product foo = new Product();
foo.productName = "Something";
Но не могу этого сделать:
var bar = (from item in myDataContext.Products
select new Product {
productName = item.productName
}).ToList();
Я думаю, что при выполнении запроса LINQ между выбранными объектами и извлеченными строками таблицы создается какая-то связь (и поэтому обновление Product в первом фрагменте кода не представляет никакой проблемы, поскольку никаких ассоциаций нет). были сделаны). Я, однако, хотел бы понять это немного глубже (и это мой первый вопрос к вам, а именно: в чем отличие от одного фрагмента кода к другому) .
Теперь я слышал о нескольких способах решения этой проблемы:
1) Создание класса, который наследует класс linq (или класс с такими же свойствами)
2) Выбор анонимных объектов
И это подводит меня ко второму вопросу:
Если вы выбрали один из двух вышеуказанных подходов, какой вы выбрали и почему? Какие еще проблемы возникли у вашего подхода? Есть ли другие подходы?