2

我正在尝试使用存储库模式和工作单元模式构建一个可重用的代码来访问 Azure 表存储。

我想要实现的是实例化一个工作单元,然后将其用于不同的存储库。

像这样的东西:

MyUnitOfWork uow = new MyUnitOfWork();
uow.Users.Add(User user);
uow.Users.GetAllUsers();
uow.Users.FindUser(User user);
uow.Users.Delete(User user);
.......
uow.Products.Add(Product product);
uow.Products.Delete(Product product);
.......
uow.Invoices.Add(Invoice invoice);
.......
uow.Save();

我在理解如何使用 TableServiceContext 实现这一点时遇到了一些问题

这是我到目前为止所做的......

该模型:

   public class User : TableServiceEntity
   {
    public User(string partitionKey, string rowKey)
        : base(partitionKey, rowKey)
    {
    }

    public User()
        : this(Guid.NewGuid().ToString(), String.Empty)
    {
    }

    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    }

IRepository 接口:

  public interface IRepository<T> where T : TableServiceEntity
  {
    IQueryable<T> Query { get; }

    //bool CreateIfNotExist();

    //bool DeleteIfExist();

    //void AddEntity(T obj);

    //void AddEntity(IEnumerable<T> objs);

    //void AddOrUpdateEntity(T obj);

    //void AddOrUpdateEntity(IEnumerable<T> objs);

    //void DeleteEntity(T obj);

    //void DeleteEntity(IEnumerable<T> objs);
    }

接口工作单元:

    public interface ITableUow
    {
    void Save();

    IUserRepository Users { get; }
    }

接口用户存储库:

    public interface IUserRepository: IRepository<User>
    {
    IQueryable<User> GetUsers();
    }

Azure 表存储库:

     public class AzureTableRepository<T> : IRepository<T> where T : TableServiceEntity
    {
    public AzureTableRepository(TableServiceContext context)
    {
        if (context != null)
        {
            TableContext = context;
        }
    }

    protected TableServiceContext  TableContext { get; set;    }

    public IQueryable<T> Query
    {
        get { throw new NotImplementedException(); }
    }

    }

用户存储库:

    public class UserRepository : AzureTableRepository<User>, IUserRepository
    {
    public UserRepository(TableServiceContext context)
        : base(context)
    {

    }


    public IQueryable<User> GetUsers()
    {
        throw new NotImplementedException();
    }
    }

Azure 表工作单元:

     public class AzureTableUow: ITableUow
    {

    public void Save()
    {

    }

    public IUserRepository Users
    {
        get { throw new NotImplementedException(); }
    }
    }
4

0 回答 0