2011-06-17 9 views
0

基本抽象クラスを継承するLINQ2SQLクラスからLINQクエリを実行する際に問題が発生します。抽象クラスから継承するLINQ2SQL/WCFクラスに対するLINQクエリの例外

[DataContract] 
public abstract class AbstractClass 
{ 
    [DataMember] 
    public abstract int Foo { get; set; } 
} 


// LINQ2SQL class. 
[DataContract] 
public class ConcreteClass : AbstractClass 
{ 
    [DataMember] 
    public override int Foo { ... } 
} 

コンクリートクラスに対してLINQクエリを実行しようとすると問題が発生します。私は、 "Class member AbstractClass.Fooはマップされていません"というSystemExceptionを取得します。クエリがCocnreteClass反対しているが、エラーがAbstractClass上でどのように

// Sample LINQ query. 
result = from c in dataContext.ConcreteClasses where c.Foo == 42 select c; 

お知らせ:クエリは次のようになります。どんなアイデアがここで起こっていますか?

答えて

0

コンパイラが正しい型を推測するのに問題があるようです。 LINQ2SQLコンテキストから返されたクラスを使用する代わりに、基本クラスを使用していたので、正しい型に明示的にキャストしなければなりませんでした。

この前の例では動作しません:

result = from c in dataContext.ConcreteClasses where c.Foo == 42 select c; 

この例では、作業を行います。

result = from c in dataContext.ConcreteClasses where ((ConcreteClass)c).Foo == 42 select c; 

奇数を、それが動作します。なぜそれがそれをするのか理解できる誰にアップアップ。

(参考:Very strange inheritance behavior.

0

抽象クラスにはコンストラクタがありますか?私はこれまでこれに似た何かを持っていたと思うし、抽象クラスに保護されたコンストラクタを追加することはそれを固定したようだ。

+0

HRMは、私は、コンパイラは、パラメータなしのコンストラクタを自動生成と信じています。いずれにしても、私はあなたの提案に従って非抽象化保護されたコンストラクタを追加しようとしましたが、それは助けにはなりませんでした。 –

0

テーブル抽象継承またはその他のデータ中心継承を使用する抽象クラスおよび具象クラスLINQ2SQLクラスはありますか?私は、あなたがWFFの上でEFクラスを渡すとき、何らかの理由で継承情報​​を失うことを知っています。

+0

クエリは実際にサーバー側で行われるため、情報が失われるとは思われません。 –

関連する問題