【发布时间】:2018-03-05 20:02:58
【问题描述】:
我正在尝试使用 BLL、DAL 和 UI 构建三层架构。我正在做一个小型公寓管理系统项目(其中包括关于住校学生、他们的房间和他们住的房间的公寓的信息)。由于我是初学者,因此我需要解决一些技术问题。我正在使用具有存储库模式的实体框架。我的项目基于MVVM 方法,我正在使用Automapper。
Automapper 代码
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Room, RoomViewModel>().ReverseMap();
CreateMap<Apartment, ApartmentViewModel>().ReverseMap();
}
}
public class AutoMapperConfig
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<AutoMapperProfile>();
});
}
}
我正在尝试向我的数据库中添加一个新房间。我的 Room 和 Apartment 表之间存在多对多关系,我的数据库如下所示:
我的 IRepository 界面如下所示:
public interface IRepository<T> where T : class
{
IEnumerable<T> GetAll();
T GetById(int id);
T Get(Expression<Func<T, bool>> expression);
IQueryable<T> GetMany(Expression<Func<T, bool>> expression);
bool Insert(T obj);
bool Update(T obj);
bool Delete(int id);
int Count();
void Save();
}
我有 RoomRepository 和 ApartmentRepository,它们都实现了 IRepository 接口。我已经创建了我的存储库和基础架构:
基础设施(文件夹)
- IApartmentRepository.cs
- IRepository.cs
- IRoomRepository.cs
- IStudentRepository.cs
- IUserRepository.cs
存储库(文件夹)
- ApartmentRepository.cs
- RoomRepository.cs
- StudentRepository.cs
- UserRepository.cs
添加新房间时,管理员必须说明该房间属于哪个公寓。 RoomController 中的 Add 方法如下:
[HttpPost]
public JsonResult Add(RoomViewModel roomModel)
{
try
{
//var apartViewModel = new ApartmentRoomViewModel();
//apartViewModel.ApartmentID = roomModel.ApartmentNameId;
var room = AutoMapper.Mapper.Map<Room>(roomModel);
var status = _roomRepository.Insert(room);
_roomRepository.Save();
//apartViewModel.RoomID = room.Id;
return Json(new { status, message = "Ekleme işlemi başarılı." }, JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
return Json(new { status = false, message = "Hata! Ekleme işlemi gerçekleştirilemedi." }, JsonRequestBehavior.AllowGet);
}
}
房间视图模型
public class RoomViewModel
{
public int Id { get; set; }
public int DoorNumber { get; set; }
public int FloorNumber { get; set; }
public int Capacity { get; set; }
public int Fullness { get; set; }
public string ApartmentName { get; set; }
public int ApartmentNameId { get; set; }
}
用户界面
我的问题是,当我想在“房间添加”页面中插入从用户那里获取的数据时,我可以将为房间收集的信息添加到房间表中,但我还想添加公寓信息(即那个房间的 ApartmentID)和同一个房间的 RoomID 到数据库中的 ApartmentRoom 表,到目前为止我还不能这样做。如果到目前为止我没有错,那我该怎么办?
- 我是否应该创建另一个存储库,例如实现IRepository接口的ApartmentRoomRepository,并在RoomController内部的Add方法中调用ApartmentRoomRepository的insert方法? (据我了解,这种方法似乎不太正确,但我不确定。)
- 我应该创建 ApartmentRoomViewModel,而不是第一个选项?在这种情况下,如何将房间的 ApartmentID 与房间的 RoomID 插入到 ApartmentRoom 表中?
编辑 1:我使用的是数据库优先方法。
编辑 2:我找到了解决方案并在下面分享为答案。
【问题讨论】:
标签: asp.net-mvc entity-framework repository-pattern data-access-layer business-logic-layer