Hi,
I'm getting a InvalidOperationException when trying to run this code:
database.Produkts.SingleOrDefault<Produkt>(x => x.Kod == "123")
It only occurs when the Kod
property has an override modifier.
I need it this way because the entity class is derived from another class that resides in a separate assembly.
Here's how the classes are defined:
The base class:
namespace Interfaces.Model
{
[DataContract(Name = "Produkt", Namespace = "")]
public class Produkt
{
[DataMember]
public virtual string Kod { get; set; }
...
The class generated by 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();
}
}
}
...
And the second part of the definition:
namespace DAL.Linq
{
[DataContract(Name = "Produkt", Namespace = "")]
partial class Produkt : Interfaces.Model.Produkt
{
}
}
Now retrieving all the instances from the database (without the filter/where caluse) will work just fine. It's only that building a predicate that includes the overridden property will not.
I assume that it's some kind of a problem related to retrieving the property's attributes with reflection as the exception gets thrown from the method GetDataMember
of the System.Data.Linq.Mapping.MetaType
class.
My real question is if this is a Linq bug or can I somehow make Linq recognize this property to attribute mapping?