使用通用存储库模式 c# 时如何获取实体的 ID
How to get ID of Entity When Using Generic Repository Pattern c#
试图找出在使用通用存储库模式时如何获取最近添加的实体的 ID。一个例子会很好。
这是存储库,
public class Repository<T> : IRepository<T> where T : class {
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public Repository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("dbContext");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
}
entity.Id这里不存在
如果您单步执行代码,而 运行,您将看到 ID
(无论您如何命名)属性 将在添加后填充。
那么,您的问题不在于 entity framework,而在于通用存储库。您需要一种方法来 return(再次假设)您刚刚添加的 int ID
。
创建接口:
public interface IEntity
{
public int ID { get; set; }
}
并让您的所有模型都继承自它。然后,将类型约束更改为:
public class Repository<T> : IRepository<T> where T : IEnitity
那么保存后就可以returnentity.ID
试图找出在使用通用存储库模式时如何获取最近添加的实体的 ID。一个例子会很好。 这是存储库,
public class Repository<T> : IRepository<T> where T : class {
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public Repository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("dbContext");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
}
entity.Id这里不存在
如果您单步执行代码,而 运行,您将看到 ID
(无论您如何命名)属性 将在添加后填充。
那么,您的问题不在于 entity framework,而在于通用存储库。您需要一种方法来 return(再次假设)您刚刚添加的 int ID
。
创建接口:
public interface IEntity
{
public int ID { get; set; }
}
并让您的所有模型都继承自它。然后,将类型约束更改为:
public class Repository<T> : IRepository<T> where T : IEnitity
那么保存后就可以returnentity.ID