Я получаю InvalidOperationException при попытке запустить этот код:
database.Produkts.SingleOrDefault<Produkt>(x => x.Kod == "123")
Это происходит только тогда, когда свойство Kod
имеет модификатор переопределения.Мне это нужно, потому что класс сущности является производным от другого класса, который находится в отдельной сборке.
Вот как определяются классы:
Базовый класс:
namespace Interfaces.Model
{
[DataContract(Name = "Produkt", Namespace = "")]
public class Produkt
{
[DataMember]
public virtual string Kod { get; set; }
...
Класс, сгенерированный Linq:
namespace DAL.Linq
{
[Table(Name="dbo.Produkt")]
public partial class Produkt : INotifyPropertyChanging, INotifyPropertyChanged
{
[Column(Storage="_Kod", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
public override string Kod
{
get
{
return this._Kod;
}
set
{
if ((this._Kod != value))
{
this.OnKodChanging(value);
this.SendPropertyChanging();
this._Kod = value;
this.SendPropertyChanged("Kod");
this.OnKodChanged();
}
}
}
...
И вторая часть определения:
namespace DAL.Linq
{
[DataContract(Name = "Produkt", Namespace = "")]
partial class Produkt : Interfaces.Model.Produkt
{
}
}
Теперь извлекаем все экземпляры из базы данных (без фильтра / где caluse) будет работать просто отлично.Только то, что построение предиката, включающего переопределенное свойство, не будет.
Я предполагаю, что это какая-то проблема, связанная с получением атрибутов свойства с отражением, поскольку исключение выдается из метода GetDataMember
изSystem.Data.Linq.Mapping.MetaType
класс.
Мой реальный вопрос: если это ошибка Linq или я могу как-то заставить Linq распознавать это свойство для сопоставления атрибутов?