У меня есть следующий код:
public interface IKeyed<TKey>
{
TKey Id { get; }
}
// This is the entity framework generated model. I have added the
// IKeyed<Guid> interface
public partial class Person : IKeyed<Guid>
{
public Guid Id { get; set; }
}
public class Repository<TKey, TEntity> : IKeyedRepository<TKey, TEntity>
where TEntity : class, IKeyed<TKey>
{
private readonly IObjectSet<TEntity> _objectSet;
public Repository(IOjectSet<TEntity> objectSet)
{
_objectSet = objectSet;
}
public TEntity FindBy(TKey id)
{
return _objectSet.FirstOrDefault(x => x.Id.Equals(id));
}
}
[Update]
Вот как я это называю:
Db2Entities context = new Db2Entities(_connectionString); // This is the EF context
IObjectSet<Person> objectSet = context.CreateObjectSet<Person>();
IKeyedRepository<Guid, Person> repo = new Repository<Guid, Person>(objectSet);
Guid id = Guid.NewGuid();
Person person = repo.FindBy(id); // This throws the exception.
Приведенный выше код компилируется. Когда выполняется метод FindBy, я получаю следующую ошибку:
Невозможно создать постоянное значение типа 'Тип закрытия'. В этом контексте поддерживаются только примитивные типы (например, Int32, String и Guid).
Так как тип моего 'Id' - это Guid (один из поддерживаемых типов примитивов), похоже, я должен быть в состоянии превратить это в работу.
Кто-нибудь знает, возможно ли это?
Спасибо
Bob