我刚开始学习C#和ASP.NET MVC,试图理解仓储模式。我读了很多文章,但是我不知道如何使用它。我目前正在使用LINQ to SQL来访问我SQL Server 2005数据库,并为测试目的创建了两个表。我有一个名为
那么,我应该创建一个基本仓库供两个实体使用,还是应该为每个实体单独创建一个仓库?如果有人愿意给我展示一些代码,那就太好了。
到目前为止,我有这个员工仓库。我也有一个用于
Employees
的表和一个名为EmployeeContacts
的表。这两个表的主键都是UserName。
Employees
- UserName
- LastName
- FirstName
- Position
Status
HireDate
- UserName
- Contact1
- Contact1Phone
- Contact1Relationship
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
继承。我的员工数据保存正确,但员工联系方式却没有保存,我不知道为什么。
我是否正确实现了存储库模式?