这是通用插入方法。我需要你的建议来返回插入记录的ID。
public static void Create<T>(T entity) where T : class
{
using (var context = new InformasoftEntities())
{
DbSet dbSet = context.Set<T>();
dbSet.Add(entity);
context.SaveChanges();
}
}
答案 0 :(得分:3)
Arturo Martinex的评论是正确的。
实体框架在SaveChanges期间修复了ID,因此它已在您传入方法的实体中更新。
要具体执行您的要求,您可以将通用约束从类更改为所有实体继承的新抽象类,该抽象类定义该类中的键。
public static int Create<T>(T entity) where T : BaseEntity
{
using (var context = new InformasoftEntities())
{
DbSet dbSet = context.Set<T>();
dbSet.Add(entity);
context.SaveChanges();
return entity.Id;
}
}
public abstract class BaseEntity
{
int Id { get; set;}
}
此技术在InsertOrUpdate
方法
在泛型方法中使用键的另一种方法是查询MetaData,如下所述:
答案 1 :(得分:1)
您需要稍加修改:
您需要创建由实体
实施的IHasAutoIDpublic interface IHasAutoID {
int getAutoId();
}
在实体类
中public class EntityA : IHasAutoID {
public int getAutoId() {
return pk; // Return -1 If the entity has NO Auto ID
}
}
在您的创建功能
中public static int Create<T>(T entity) where T : class
{
using (var context = new InformasoftEntities())
{
DbSet dbSet = context.Set<T>();
dbSet.Add(entity);
context.SaveChanges();
if (entity is IHasAutoID) {
return ((IHasAutoID)entity).getAutoId();
}
return -1; // entity is NOT IHasAutoID)
}
}
注意:
答案 2 :(得分:-1)
public async Task<int> Add(TEntity entity)
{
await _context.Set<TEntity>().AddAsync(entity);
await Save();
return Task.FromResult(entity).Id;
}