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; }
}

EF 6中的身份插入是否适用于Guids ?

我想建议你下面提到的实现。我不知道你那边是否有可能。

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;
}