EF 6中的身份插入是否适用于Guids ?
本文关键字:是否 适用于 Guids 插入 身份 EF | 更新日期: 2023-09-27 18:03:18
参考如何在实体框架中获得插入实体的Id中选择的答案?为标识字段工作是一个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; }
}
我想建议你下面提到的实现。我不知道你那边是否有可能。
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;}
}
我能让它工作。通过更改代码在我的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;
}