我正嘗試使用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並自動分配正確的值。如果你嘗試,讓我知道發生了什麼。我有興趣。 –