参考How can I get Id of inserted entity in Entity Framework?中选定的答案是否为Guid的身份字段?
另外,有没有办法只做一个简单的`SELECT @@ IDENTITY'在存储库和界面设置?
修改1
我需要能够使用通用的Repo方法插入记录。
我的模特:
[Table(name: "Images")]
public class ImagesViewModel
{
[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid RecordID { get; set; }
[Column(TypeName = "image")]
public byte[] MainImage { get; set; }
public string MainImageMimeType { get; set; }
[Column(TypeName = "image")]
public byte[] ImageThumbnail { get; set; }
public string ImageThumbnailMimeType { get; set; }
public bool Enabled { get; set; }
public bool PrimaryImage { get; set; }
public bool RelatedImage { get; set; }
public Guid? RelatedImageID { get; set; }
public ImagesViewModel()
{
Enabled = true;
PrimaryImage = true;
RelatedImage = false;
}
}
如果我正在执行存储过程,我只需执行SELECT @@IDENTITY
并返回标识字段的值或新插入的记录。
不幸的是,我在代码优先使用通用数据存储库。到目前为止,我有以下方法(正在进行中):
public virtual Guid Add<T>(T newItem) where T : class
{
using (var context = new ApplicationDbContext())
{
context.Set<T>().Add(newItem);
context.SaveChanges();
context.Entry(newItem).
return _ImagesViewModel.RecordID;
};
}
所以我想我在问,这样做的正确方法是什么?
修改2
以下是Add方法的更新代码片段(正在进行中):
public virtual Guid Add<T>(T entity) where T : BaseEntity
{
using (var context = new ApplicationDbContext())
{
DbSet dbSet = context.Set<T>();
dbSet.Add(entity);
context.SaveChanges();
return entity.RecordID;
}
}
public abstract class BaseEntity
{
Guid RecordID { get; set; }
}
答案 0 :(得分:2)
我想向您提出下面提到的实施建议。我不知道是否可以在您这边做。
public virtual Guid Add<T>(T entity) where T : BaseEntity
{
using (var context = new ApplicationDbContext())
{
DbSet dbSet = context.Set<T>();
dbSet.Add(entity);
context.SaveChanges();
return entity.Id;
}
}
public abstract class BaseEntity
{
public Guid Id { get; set;}
}
答案 1 :(得分:0)
我能够让它运转起来。通过更改我的BLL中的代码,只需在添加后返回ID,如下所示:
将void Users_Add(SiteUsersModel _SiteUsersModel);
更改为Guid Users_Add(SiteUsersModel _SiteUsersModel);
和
public void Users_Add(SiteUsersModel _SiteUsersModel)
{
_IUsersRepository.Add(_SiteUsersModel);
}
到
public Guid Users_Add(SiteUsersModel _SiteUsersModel)
{
Guid RecordID = new Guid();
using (var context = new ApplicationDbContext())
{
context.SiteUsers.Add(_SiteUsersModel);
context.SaveChanges();
RecordID = _SiteUsersModel.RecordID;
}
return RecordID;
}
似乎很高兴。