Основной репозиторий MVC для объединения таблиц - PullRequest
0 голосов
/ 22 мая 2018

У нас есть транзакционная таблица Customer с несколькими таблицами поиска с внешними ключами.Мы хотим, чтобы 3 таблицы соединились.Должен ли репозиторий когда-либо объединять таблицы или он используется только для чтения отдельных таблиц?

Также, если это так, во что репозиторий помещает данные?Я слышал, что он не может знать о Viewmodels и т. Д., К какому типу данных объекта будут относиться результаты?

Репозиторий:

void GetByCustomerTransactionId()
{
   var result = from ct in CustomerTransaction
    join pt in ProductType on pt.ProductTypeId equals ct.ProductTypeId 
    join ss in Status on s.StatusId equals ct.StatusId 
    select new all fields
}

Модели:

public class CustomerTransaction
{
    public int CustomerTransactionId{ get; set; },
    public int ProductTypeId {get; set; }, //joins to ProductTypeTable
    public int StatusID {get; set; },  //joins to StatusTypeTable
    public string DateOfPurchase{ get; set; },
    public int PurchaseAmount { get; set; },
}

public class ProductType
{
    public int ProductTypeId{ get; set; }
    public string ProductName { get; set; },
    public string ProductDescription { get; set; },
}

public class StatusType
{
    public int StatusId{ get; set; }
    public string StatusName{ get; set; },
    public string Description{ get; set; },

}

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Один из способов установить отношения «один ко многим» в ядре ASP.NET - это Fluent API

public class CustomerTransaction
{
    public int CustomerTransactionId { get; set; }
    public string DateOfPurchase{ get; set; }
    public int PurchaseAmount { get; set; }

    // relationships
    public ProductType ProductType { get; set; }
    public int ProductTypeId { get; set; } 

    public StatusType StatusType { get; set; }
    public int StatusID { get; set; }  
}

public class ProductType
{
    public int ProductTypeId { get; set; }
    public string ProductName { get; set; }
    public string ProductDescription { get; set; }

    // relationships
    public ICollection<CustomerTransaction> CustomerTransactions { get; set; }
}

public class StatusType
{
    public int StatusId { get; set; }
    public string StatusName { get; set; }
    public string Description { get; set; }

    // relationships
    public ICollection<CustomerTransaction> CustomerTransactions { get; set; }
}

Затем просто используйте Include, чтобы правильно соединить их вместе в своем результате.

public void GetByCustomerTransactionId(int id)
{
     var result = context.CustomerTransaction.Where(x=>x.CustomerTransactionId == id)
     .Include(i=>i.ProductType)
     .Include(i=>i.StatusType);
}
0 голосов
/ 22 мая 2018

Учитывая, что существуют ограничения внешнего ключа для таблиц, вы можете просто сделать это без необходимости каких-либо соединений самостоятельно

public class CustomerTransaction
{
    public int CustomerTransactionId{ get; set; },
    public int ProductTypeId {get; set; }, //joins to ProductTypeTable
    public int StatusID {get; set; },  //joins to StatusTypeTable
    public string DateOfPurchase{ get; set; },
    public int PurchaseAmount { get; set; },
    // Add this
    public ProductType ProductType { get; set;}
    public StatusType StatusType { get; set;} 
}

, а затем в вашем хранилище просто получить CustomerTransation, и он вернет объединенные таблицыКроме того, на основе их внешнего ключа

CustomerTransaction GetByCustomerTransactionId(int id)
{
   var result = ct.CustomerTransaction.Where(x => x.CustomerTransactionId == id).ToList()
  return result;
}

, который даст вам ваши CustomerTransactions, их StatusType и ProductType

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...