2010-11-24 7 views
0

私はこのコードを持っている:これを初期化する方法はIObjectSetのコードですか?

public interface IEntityBase<T> where T : struct, IComparable 
{ 
    T? ID { get; set; } 
} 

そして、

すぎ
public class EntityBase<T> : IEntityBase<T> where T : struct, IComparable 
{ 
    private T? _id; 

    protected EntityBase(T? key) 
    { 
     this._id = key; 
    } 

    public virtual T? Id 
    { 
     get { return this._id; } 
     set { this._id = value; } 
    } 

    public override bool Equals(object entity) 
    { 
     if (entity == null || !(entity is EntityBase<T>)) 
     { 
      return false; 
     } 

     return (this == (EntityBase<T>)entity); 
    } 

    public static bool operator ==(EntityBase<T> left, EntityBase<T> right) 
    { 
     if ((object)left == null && (object)right == null) 
     { 
      return true; 
     } 

     if ((object)left == null || (object)right == null) 
     { 
      return false; 
     } 

     if (left.Id.Value.CompareTo(right.Id.Value) != 0) 
     { 
      return false; 
     } 

     return true; 
    } 

    public static bool operator !=(EntityBase<T> left, EntityBase<T> right) 
    { 
     return (!(left == right)); 
    } 

    public override int GetHashCode() 
    { 
     return this._id.HasValue ? this._id.Value.GetHashCode() : 0; 
    } 
} 

、あるMyContextコード:

が、objectSetと機能で、外観のエラーメッセージ!

正しい構文は何ですか。

public class MyContext : ObjectContext 
{ 
    private IObjectSet<Page> _pageSet; 

    public MyContext(EntityConnection connection) 
     : base(connection) 
    { 
    } 

    public IObjectSet<Page> PageSet 
    { 
     get 
     { 
      return _pageSet ?? (_pageSet = ObjectSet<Page>()); 
     } 
    } 

    public virtual IObjectSet<TEntity> ObjectSet<TEntity>() where TEntity : struct, EntityBase<TEntity>, IComparable 
    { 
     return CreateObjectSet<TEntity>(); 
    } 
} 

クラスのページ:

public class Page : EntityBase<long> 
{ 
    public Page(long? key) 
     : base(key) 
    { 
    } 

    public virtual string Title { get; set; } 
    public virtual string Body { get; set; } 
    public virtual Page Parent { get; set; } 
} 

感謝!

+1

どのようなエラーメッセージが表示されますか? –

+0

MyContext.cs特に、ObjectSet関数では、このメッセージ "EntityBase ":制約クラスと 'class'または 'struct'制約の両方を指定できません。 – Abdalla

答えて

2

を指定しない:

public virtual IObjectSet<TEntity> ObjectSet<TEntity>() 
       where TEntity : struct, EntityBase<TEntity>, IComparable 

あなたはそのTEntityを指定しています構造体およびの参照タイプ(EntityBase<>はクラス、したがって参照タイプ)でなければなりません。これらは相互に排他的です。あなたは、おそらく(それがCreateObjectSetを見ずに言うのは難しいのです)したいことは次のとおりです。

public virtual IObjectSet<TEntity> ObjectSet<TEntity, T>() 
       where TEntity : EntityBase<T> 
       where T : struct, IComparable 

注これはあなたの他のコードに基づいて、ただの推測であるが、主な問題は、あなたがする一般的なパラメータを制限しようとしているということであること構造体とクラスの両方であり、それを修正する必要があります。

+0

ありがとうございますPhilip Rieck、してください!上のコードをもう一度見て、完全なコードを追加してください。今私は明確なビジョンを望んでいますか? – Abdalla

+1

@Abdalla - 'ObjectSet 'ジェネリックメソッドから 'struct'制約を削除する必要があります。しかし、 'struct'制約はエンティティ自体に残ることがあります。 –

0

あなたはこのラインでは...あなたは4.0フレームワークをターゲットに構築していることを確認してください...あなたが得ているエラーの種類を

関連する問題