规范模式和实体框架

时间:2013-01-31 16:26:28

标签: entity-framework-5 specifications generics

public interface IEntite
{
   int Id { get; set; }
   string NomEntite { get; }
}

public class SpecIdEntite<TEntite> : CompositeSpecification<TEntite> where TEntite : IEntite
{
   private int _id;
   public SpecIdEntite(int id)
   {
      _id = id;
   }

  public override Expression<Func<TEntite, bool>> IsSatisfiedBy()
  {
     return candidate => (candidate != null && candidate.Id == _id);
  }
}

当我尝试此规范时,我收到此错误:&#34;无法转换类型&#39;类型名称&#39;输入&#39; X&#39;。 LINQ to Entities仅支持转换实体数据模型基元类型。&#34;

任何人都知道如何实现这个概念?

我的所有实体都有Id属性,我想使用通用规范

1 个答案:

答案 0 :(得分:1)

我不确切知道原因,但唯一缺少的是该类型的class约束。这应该有效:

public interface IEntite
{
   int Id { get; set; }
   string NomEntite { get; }
}

public class SpecIdEntite<TEntite> : CompositeSpecification<TEntite> where TEntite : class, IEntite
{
   private int _id;
   public SpecIdEntite(int id)
   {
      _id = id;
   }

  public override Expression<Func<TEntite, bool>> IsSatisfiedBy()
  {
     return candidate => (candidate != null && candidate.Id == _id);
  }
}

class约束指定类型类型必须是引用类型,如here所述。