2013-01-31 121 views
2
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); 
    } 
} 

当我尝试这说明我得到这个错误:“无法转换的类型‘类型名称’输入‘X’LINQ到实体仅支持铸造实体数据模型的基本类型。”规范模式和Entity Framework

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

我所有的实体有一个ID属性,我想用一个通用的规范

+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