По моему мнению, вы можете пойти двумя путями, в зависимости от того, как вы хотите работать с данными впоследствии. Создайте новую архивную таблицу, как вы предлагаете, или просто добавьте дополнительный столбец в вашу текущую таблицу клиентов.
Если вы создаете новую таблицу, вы сначала копируете необходимые значения из таблицы Customer в таблицу Archive, а затем удаляете данные из таблицы Customer.
Или вы добавляете дополнительный столбец в таблицу Customer, например, IsArchived, и сделайте его bool (немного в SqL). Установите значение true для «Клиент в архиве» или false, если нет.
Затем вы можете отфильтровать своих клиентов в разных контроллерах на основе этого значения.
Если у вас уже есть данные в таблице, сделайте ее недействительным bool (bool?) - (SqL - Allow Null) и обработайте нулевые значения как false.
Редактировать
В случае, если у людей тот же вопрос:
В модели ADD:
public bool? IsArchived { set; get; }
Nu-получить
Add-migration AddNewColumnToWhatever
Update-database
В контроллере:
public ActionResult Archive(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Customer customer = _context.Customer.Find(id);
if (customer == null)
{
return HttpNotFound();
}
customer.IsArchived = true;
return RedirectToAction("Index", "Customers");
}
public ActionResult GetCustomers(string typeOfCustomer)
{
List<Customer> customers = new List<Customer>();
if (string.IsNullOrEmpty(typeOfCustomer))
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (typeOfCustomer == "archived")
{
customers = _context.Customer.Include(c => c.MembershipType).Where(x => x.IsArchived == true).Select(x => x).ToList();
}
else if (typeOfCustomer == "active")
{
customers = _context.Customer.Include(c => c.MembershipType).Where(x => x.IsArchived == false).Select(x => x).ToList();
}
else
{
return HttpNotFound();
}
return View(customers);
}
Создайте новое представление для GetCustomers и определите модель, которая будет:
@model List<YourProject.FolderWhereYourClassIsDefined.Customer>
И постройте свой взгляд так, как вы хотите.
В существующем представлении поместите 2 кнопки для вызова нового ActionResult.
@Html.ActionLink("View Archived", "GetCustomers", "Customers", new { typeOfCustomer = "archived" }, new { @class = "btn" })
@Html.ActionLink("View Active", "GetCustomers", "Customers", new { typeOfCustomer = "active" }, new { @class = "btn" })//You don't need it
Теперь в контроллере индекса выполните ЭТО:
var customer = _context.Customer.Include(c => c.MembershipType)
.Where(c => c.IsArchived == null)// important
.Where(c => c.IsArchived == false) // important
.Include(c => c.CardType)
.ToList();//to excute query immediatly
С тобой все должно быть хорошо. LasseHolm / EndlessQ