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

时间:2016-08-20 15:42:44

标签: c# entity-framework

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

2 个答案:

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

似乎很高兴。