c# - 如何在 C# 中访问泛型类型的元素

标签 c# entity-framework entity-framework-4

我正在研究一种可重用的数据库存储库方法,用于使用 EntityFramework 4.3 将实体附加和保存到数据库。

    private void SaveObject<T>(T entityToSave, DbSet<T> dbSet) where T : class
    {
        if (db.Entry(entityToSave).State == EntityState.Detached)
        {
            if (entityToSave.Id == Guid.Empty) // how do I access the Id property?
                dbSet.Add(entityToSave);
            else
                db.Entry(entityToSave).State = EntityState.Modified;
        }
    } 

我遇到的问题是我需要告诉我的方法哪个属性是 Id,这样我就可以检查它是否已设置。如果它是空的,那么我知道我正在创造一个全新的记录。否则我正在修改现有记录。

我如何告诉我的方法 Id 属性是什么?

最佳答案

您需要一个定义 Id 属性的接口(interface)或基类,并将其用作您的通用约束。示例:

public interface IEntity
{
    Guid Id { get; }
}

private void SaveObject<T>(T entityToSave, DbSet<T> dbSet) where T : class, IEntity
    {
        if (db.Entry(entityToSave).State == EntityState.Detached)
        {
            if (entityToSave.Id == Guid.Empty) // how do I access the Id property?
                dbSet.Add(entityToSave);
            else
                db.Entry(entityToSave).State = EntityState.Modified;
        }
    } 

关于c# - 如何在 C# 中访问泛型类型的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10572461/

相关文章:

c# - LINQ to XML、ORM 或其他 "Completely Different"?

c# - 如何使用 Entity Framework 获取单值

c# - 如何检查实体的创建日期是否已过 20 天?

c# - EF 4 - 使用时间戳列更新表时出现异常

mysql - 将 MySql 与 Entity Framework 4 和 Code-First Development CTP 一起使用

c# - 如何通过sql或Linq To Sql中的多属性搜索获取ProductIds?

C# 类型转换和 as 之间的区别?

c# - Windows 8 Metro 专注于网格

c# - MVC 5 不支持每种类型的多个对象集

c# - 两个实体之间的代码优先外键