Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
LINQ, сущность, реализующая интерфейс и исключение в сопоставлении
Я использую шаблон репозитория с LINQ, есть IRepository.DeleteOnSubmit(T сущности). Он отлично работает, но когда мой класс сущностей имеет интерфейс, например:
public interface IEntity { int ID {get;set;} }
public partial class MyEntity: IEntity {
public int ID {
get { return this.IDfield; }
set { this.IDfield=value; }
}
}
а затем пытается удалить какой-то объект, как это:
IEntity ie=repository.GetByID(1);
repoitory.DeleteOnSubmit(ie);
бросает
Член 'IEntity.ID' не имеет поддерживаемого перевода в SQL.
извлечение данных из DB работает, но удалить и вставить не. Как использовать интерфейс против DataContext?
Вот оно:
Сообщение об исключении:
Член 'MMRI.DAL.ITag.idContent' не имеет поддерживаемого перевода в SQL.
Код:
var d = repContent.GetAll().Where(x => x.idContent.Equals(idContent));
foreach (var tagConnect in d) <- error line
{
repContet.DeleteOnSubmit(tagConnect);
(он получает все теги из DB и удаляет их)
И стек trace:
[NotSupportedException: The member 'MMRI.DAL.ITag.idContent' has no supported translation to SQL.]
System.Data.Linq.SqlClient.Visitor.VisitMember(SqlMember m) +621763
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node) +541
System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression exp) +8
System.Data.Linq.SqlClient.SqlVisitor.VisitBinaryOperator(SqlBinary bo) +18
System.Data.Linq.SqlClient.Visitor.VisitBinaryOperator(SqlBinary bo) +18
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node) +196
System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression exp) +8
System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect select) +46
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect select) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node) +1024
System.Data.Linq.SqlClient.SqlProvider.BuildQuery( ...
Когда я пытаюсь сделать украсить частичный класс:
[Column(Storage = "_idEvent", DbType = "Int NOT NULL", IsPrimaryKey = true)]
public int idContent
{ get { return this.idEvent; } set { this.idEvent=value; } }
он выдает ошибку "недопустимое имя столбца 'idContent'."
Похоже, Microsoft отказалась от поддержки оператора == в интерфейсах при использовании linq-to-sql в MVC4 (или, возможно, он никогда не поддерживался). Однако вместо оператора == можно использовать i.ID.Equals(someId) .
Литье от IQueryable до IEnumerable работает, но не должно использоваться! Причина в том, что IQueryable имеет фанк-реализацию IEnumerable . Независимо от того, какой метод linq вы будете использовать на IQueryable через интерфейс IEnumerable , сначала будет выполнен запрос, все результаты будут извлечены в память из DB и в конечном итоге будут запущены локально на данных (обычно эти методы будут переведены в SQL и выполнены в DB). Представьте, что вы пытаетесь получить одну строку из таблицы, содержащей миллиард строк, извлекая все из них только для выбора одного (и это становится намного хуже с небрежным приведением IQueryable к IEnumerable и ленивой загрузкой связанных данных).
По-видимому, у Linq нет проблем с использованием оператора == с интерфейсами на локальных данных (поэтому затрагивается только IQueryable ), а также с Entity Framework (или так я слышал).
Для перевода вашего запроса LINQ в фактический SQL, Linq2SQL проверяет выражение, которое вы ему даете. Проблема заключается в том, что вы не предоставили достаточно информации для L2S, чтобы иметь возможность перевести свойство "ID" в фактическое имя столбца DB. Вы можете добиться желаемого, убедившись, что L2S может сопоставить "ID" с "IDField".
Это должно быть возможно с использованием подхода, изложенного в ответах.
Если вы используете конструктор, вы также можете просто переименовать свойство класса "IDField" в "ID", с дополнительным преимуществом, что вам больше не придется явно реализовывать свойство "ID" в своем частичном классе, т. е. определение частичного класса для MyEntity просто становится:
public partial class MyEntity: IEntity
{
}