参照データ用の類似した 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.
エラーを見つけるか、正しい方向を指定するのを手伝ってください。