簡體   English   中英

在存儲庫中而不是在MVC Controller中創建新的GUID

[英]Create New GUID in repository instead of in MVC Controller

我正在使用udemy視頻的說明創建新的MVC解決方案。 講師使用存儲庫模式與模型進行交互,但他使用了int。 另一方面,我正在使用Guid,但他沒有顯示。 我知道在自動創建一個int的同時,我需要像在這里一樣顯式地創建Guid:

[HttpPost]
public ActionResult CreateCarrier(Carrier carrier)
{
      carrier.CarrierID = System.Guid.NewGuid();
      carriers.Insert(carrier);
      carriers.Commit();

      return RedirectToAction("CarrierList");
}

但是,由於我有很多類,因此我認為這將是很多額外的代碼。 我是否應該在插入實體ID之前立即為其創建Guid? 我只是不知道如何在存儲庫中執行此操作。 這是存儲庫代碼:

public abstract class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class
{
    internal DataContext context;
    internal DbSet<TEntity> dbSet;
    public virtual void Insert(TEntity entity)
    {
         dbSet.Add(entity);
    }
}

這是接口:

namespace WarehouseScheduling.DAL.Contracts
{
    public interface IRepositoryBase<TEntity> where TEntity : class
    {
        void Commit();
        void Delete(TEntity entity);
        void Delete(object id);
        void Dispose();
        IQueryable<TEntity> GetAll();
        IQueryable<TEntity> GetAll(object filter);
        TEntity GetById(object id);
        TEntity GetFullObject(object id);
        IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null);
        void Insert(TEntity entity);
        void Update(TEntity entity);
    }
}

您可以將通用類型TEntity強制為允許獲取和設置Guid的接口

public interface IHasGuid
{
    Guid Id { get; set; }
}

然后,您可以對存儲庫類/接口施加限制,以使其僅適用於IHasGuid類型的實體

namespace WarehouseScheduling.DAL.Contracts
{
    public interface IRepositoryBase<TEntity> where TEntity : IHasGuid
    {
        void Commit();
        void Delete(TEntity entity);
        void Delete(object id);
        void Dispose();
        IQueryable<TEntity> GetAll();
        IQueryable<TEntity> GetAll(object filter);
        TEntity GetById(object id);
        TEntity GetFullObject(object id);
        IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null);
        void Insert(TEntity entity);
        void Update(TEntity entity);
    }
}

並同樣修改實現,但添加代碼以自動添加到Guid中

public abstract class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : IHasGuid
{
    internal DataContext context;
    internal DbSet<TEntity> dbSet;
    public virtual void Insert(TEntity entity)
    {
         entity.Id = new Guid();
         dbSet.Add(entity);
    }
}

請記住,您的實體(在這種情況下為Carrier)必須實現IHasGuid

public class Carrier : IHasGuid
{
    public Guid Id { get; set; }
    // other fields below
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM