0

参照データ用の類似した EF5 エンティティが多数あります。例えば:

ConsultationType エンティティ

public class ConsultationType
{
    public ConsultationType()
    {
        this.Appeals = new HashSet<Appeal>();
    }

    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Appeal> Appeals { get; set; }
}   

LawBranch エンティティ

public class LawBranch
{
    public LawBranch()
    {
        this.Appeals = new HashSet<Appeal>();
    }

    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Appeal> Appeals { get; set; }
}

DB コンテキスト内の DbSet

public DbSet<LawBranch> LawBranches { get; set; }
public DbSet<ConsultationType> ConsultationTypes { get; set; }

ご覧のとおり、これらのエンティティには類似したプロパティIdとがありTitleます。

実際の問題

データベースからデータを取得してリストに入れる関数が必要です。次に、このリストの最初の要素として事前定義されたオブジェクトが挿入されます。

私の定義済みオブジェクト:

private class PredefinedReferenceItem
{
    public int Id { get; set; }
    public string Title { get; set; }

    public PredefinedReferenceItem()
    {
        this.Id = -1;
        this.Title = "some text";
    }
}   

私の間違った解決策:

IReferenceまず、参照エンティティを記述するインターフェイスを作成しました

public interface IReference
{
    int Id { get; set; }
    string Title { get; set; }
}

第二に、私の参照エンティティはこのインターフェースを実現します

public class ConsultationType : IReference { ... }
public class LawBranch: IReference { ... }

第三に、関数を作成しました

public IList<IReference> GetReferenceWithPredefinedItem<T>(DbSet<IReference> dbset)
{
    var data = from a in dbset
               orderby a.Title
               select a;

    var list = data.ToList();
    list.Insert(0, new PredefinedReferenceItem());

    return list;
}

しかし、関数は私のビューモデルでは機能しません:

return GetReferenceWithPredefinedItem(dbContext.ConsultationTypes);

VS2012 のエラー メッセージ:

The type arguments for method 'Mjc.Client.ViewModels.ViewModelBase.GetReferenceWithPredefinedItem<T>(System.Data.Entity.DbSet<Mjc.Foundation.IReference>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

エラーを見つけるか、正しい方向を指定するのを手伝ってください。

4

2 に答える 2

1

GetReferenceWithPredefinedItem を変更して、ジェネリック型 T の IReference 制約でジェネリックを使用するようになった場合、メソッドは次のようになります。

public IList<T> GetReferenceWithPredefinedItem<T>(DbSet<T> dbset) where T:IReference
{
    var data = from a in dbset
               orderby a.Title
               select a;

    var list = data.ToList();
    list.Insert(0, new PredefinedReferenceItem());

    return list;
}
于 2013-09-05T11:03:31.170 に答える