[英]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.