我正尝试使用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>();
});
}
}
我想一个新的房间添加到我的数据库。还有就是我的房间和公寓表之间的许多一对多的关系,我的数据库是这样的:
我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
Reposi保守党(文件夹)
- ApartmentRepository.cs
- RoomRepository.cs
- StudentRepository.cs
- UserRepository.cs
增加了一条新的房间,管理员必须注明哪个公寓那个房间属于。在RoomController内的添加方法如下:
[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);
}
}
RoomViewModel
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; }
}
UI
我的问题是,当我想插入数据我ta在房间添加页面中,我可以将收集到的房间信息添加到房间表中,但我也想将该房间的公寓信息(该房间的ApartmentID)和同一房间的房间ID添加到数据库中的ApartmentRoom表,我目前无法做到这一点。如果我没有错,到目前为止,在这种情况下,我应该怎么办?
- 我应该建立另一个仓库一样ApartmentRoomRepository实现IRepository接口,并调用ApartmentRoomRepository的插入方法在RoomController内部Add方法? (这种方法似乎不是一个正确的一个,据我理解,但我不知道。)
- 取而代之的是第一个选项,我应该创建ApartmentRoomViewModel?在这种情况下,我怎么能插入ApartmentID的房间,房间的RoomID到ApartmentRoom表?
编辑1:我使用的数据库第一种方法。
编辑2:我已找到解决方案并作为答案共享下面。
我假定在roomViewModel ID为0时插入到该控制器。也许你也可以尝试像'Room.ApartmentRoom.ApartmentID = roomViewModel.ApartmentNameID; Room.ApartmentRoom.RoomID = roomViewModel.RoomID;'我知道RoomID在这一点上仍然是零,但是当你添加两个实体然后保存它们时,db会为你创建id并自动分配正确的值。如果你尝试,让我知道发生了什么。我有兴趣。 –