Я новичок в C # и ASP.NET MVC, и я пытаюсь понять шаблон хранилища.Я прочитал много статей, но я просто не понимаю, как его использовать.В настоящее время я использую LINQ to SQL для доступа к своей базе данных SQL Server 2005, и для целей тестирования я создал две таблицы.У меня есть таблица Employees
и таблица EmployeeContacts
.ПК обеих таблиц - UserName.
Сотрудники
- Имя пользователя
- Фамилия
- Имя
- Должность
- Эл. Почта
Статус
HireDate
EmployeeContacts
- UserName
- Contact1
- Contact1Phone
- Contact1Relationhip
Между двумя таблицами существует отношение один к одному.Сотрудник может быть добавлен, обновлен и удален, а также данные в таблице EmployeeContacts
.
Так я бы создал базовый репозиторий для использования обеими сущностями или я должен создать репозиторий для каждой сущности отдельно?Если кто-нибудь захочет показать мне какой-нибудь код, это было бы здорово.
Пока у меня есть этот репозиторий Сотрудника.У меня также есть один для EmployeeContacts
.
namespace MvcDirectoryLINQ.Models
{
public class EmployeeRepository
{
private TestDB_DataDataContext db = new TestDB_DataDataContext();
private UserName u = new UserName();
//
// Query Methods
public IQueryable<Employee> FindAllEmployees()
{
return db.Employees;
}
public IQueryable<Employee> FindRecentEmployees()
{
DateTime myDate = DateTime.Today.AddMonths(-6);
return from empl in db.Employees
where empl.HireDate >= myDate
orderby empl.HireDate
select empl;
}
public Employee GetEmployee(string UserName)
{
return db.Employees.SingleOrDefault(d => d.UserName == UserName);
}
//
// Insert/Delete Methods
public void Add(Employee employee)
{
// get the UserName which is created from the email
employee.UserName = u.ReturnUserName(employee.Email);
//Insert the new employee into the database
db.Employees.InsertOnSubmit(employee);
db.EmployeeContacts.InsertOnSubmit(employee.EmployeeContact);
}
public void Delete(Employee employee)
{
db.EmployeeContacts.DeleteOnSubmit(employee.EmployeeContact);
db.Employees.DeleteOnSubmit(employee);
}
//
// Persistence
public void Save()
{
db.SubmitChanges();
}
}
}
У меня есть класс для EmployeeFormViewModel
:
namespace MvcDirectoryLINQ.Models
{
public class EmployeeFormViewModel
{
//Properties
public Employee Employee { get; private set; }
public EmployeeContact EmployeeContact { get; private set; }
//Constructor
public EmployeeFormViewModel(Employee employee, EmployeeContact employeeContact)
{
Employee = employee;
EmployeeContact = employeeContact;
}
}
}
Код для EmployeeController
:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(string UserName, FormCollection formValues)
{
Employee employee = employeeRepository.GetEmployee(UserName);
EmployeeContact employeecontact = employeecontactRepository.GetContact(UserName);
try
{
UpdateModel(employee);
UpdateModel(employeecontact);
employeecontactRepository.Save();
employeeRepository.Save();
return RedirectToAction("Details", new { UserName = employee.UserName });
}
catch
{
foreach (var issue in employee.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(new EmployeeFormViewModel(employee, attendingID));
}
}
На мой взгляд, я наследую от @model MvcDirectoryLINQ.Models.EmployeeFormViewModel
.Мои данные о сотрудниках сохраняются правильно, а контакты о сотрудниках - нет, и я понятия не имею, почему.
Правильно ли я реализую шаблон репозитория?