具有相同属性存储库模式的多个实体

时间:2018-10-06 14:19:12

标签: c# asp.net-mvc repository-pattern unit-of-work

我有一个通用的UOW存储库模式。我需要添加一些具有相同属性但名称彼此不同的实体。有没有最简单的方法来访问存储库,而不必分别实例化每个实体存储库。

这是实体结构的示例代码。

    public int Id  { get; set; }
    public string UserId { get; set; }
    public int ProductId { get; set; }
    public int OrderedQuantity { get; set; }
    public int FreeQuantity { get; set; }
    public double TotalPrice { get; set; }
    public double DiscountOffered { get; set; }
    public double TotalBilled { get; set; }

实体可以像 AbcProduct / XyzProduct / MnoProduct 等。它们将是此类产品的大约10-12个不同的实体,不能是放在带有CategoryId的单个表下。这些表将在数据库中经常使用和更新多次,这就是为什么我们希望采用这种方法。

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使它们共享一个公共界面。

public interface IProduct
{
    public int Id  { get; set; }
    public string UserId { get; set; }
    public int ProductId { get; set; }
    public int OrderedQuantity { get; set; }
    public int FreeQuantity { get; set; }
    public double TotalPrice { get; set; }
    public double DiscountOffered { get; set; }
    public double TotalBilled { get; set; }
}

只要AbcProductXyzProductMnoProduct实现该接口,就可以使用该接口类型的通用存储库

GenericRepository<IProduct> genericRepository;

var abcProduct = new AbcProduct();
var xyzProduct = new XyzProduct();
var mnoProduct = new MnoProduct();

genericRepository.Add(abcProduct);
genericRepository.Add(xyzProduct);
genericRepository.Add(mnoProduct);

答案 1 :(得分:0)

您当然可以使用继承。使用抽象类作为基类。

public abstract class Product
{
    public abstract int Id  { get; set; }
    public abstract string UserId { get; set; }
    public abstract int ProductId { get; set; }
    public abstract int OrderedQuantity { get; set; }
    public abstract int FreeQuantity { get; set; }
    public abstract double TotalPrice { get; set; }
    public abstract double DiscountOffered { get; set; }
    public abstract double TotalBilled { get; set; }
}

然后导出其他乘积

public class abcProduct:Product
{
    public override int Id  { get; set; }
    ...
}