访问通用实例属性

时间:2017-05-07 17:53:07

标签: c# entity-framework generics

如何访问Id的{​​{1}}属性?我有以下代码:

instance

我现在想把它变成通用的:

public void InsertOrUpdate(Book book)
{
    if (book.Id == default(int)) {

我搜索了类似的帖子,我想我应该写一些像public class TheRepository<T> : IRepository<T> where T : class { public void InsertOrUpdate(T instance) { if (instance.Id == default(int))//How can I access Id here { context.Set<T>().Add(instance); 但我不知道究竟是怎么回事?

1 个答案:

答案 0 :(得分:2)

你可以像这样做一个黑客。使用名为int的{​​{1}}类型的一个属性定义一个接口:

Id

然后声明您的实体实现了接口:

interface IHaveId
{
    public int Id { get; set; }
}

最后声明通用Repository类中使用的类型应该实现此接口。

public class Book : IHaveId

这样做可以避免使用反射,这在一般情况下非常昂贵。此外,您的代码现在更加清晰。