J'essaye de construire une architecture à trois niveaux avec BLL, DAL et UI. Je travaille sur un petit projet de système de gestion d'appartement (qui comprend les informations sur les étudiants résidents, leurs chambres et l'appartement des chambres qu'ils occupent). Depuis que je suis un débutant j'ai quelques problèmes techniques que je dois résoudre. J'utilise Entity Framework avec un modèle de référentiel. Mon projet est basé sur l'approche MVVM
et j'utilise Automapper
.Entity Framework avec Repository Pattern, insertion de données dans des tables avec une relation many-to-many
Codes pour 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>();
});
}
}
Je suis en train d'ajouter une nouvelle pièce à ma base de données. Il y a un grand nombre à plusieurs entre ma chambre et tables Appartement et ma base de données ressemble à ceci:
mon interface IRepository ressemble à:
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();
}
Je RoomRepository et ApartmentRepository, les deux implémentent l'interface IRepository. J'ai créé mes dépôts et infrastructures:
Infrastructure (dossier)
- IApartmentRepository.cs
- IRepository.cs
- IRoomRepository.cs
- IStudentRepository.cs
- IUserRepository.cs
Reposi tory (dossier)
- ApartmentRepository.cs
- RoomRepository.cs
- StudentRepository.cs
- UserRepository.cs
Tout en ajoutant une nouvelle salle, admin doit indiquer à quel appartement cette pièce appartient. La méthode Ajouter dans la RoomController est ci-dessous:
[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
Ma question est, quand je veux insérer la données I ta Depuis l'utilisateur dans la page d'ajout de salle, je peux ajouter les informations collectées pour la pièce à la table de la salle, mais je souhaite également ajouter les informations sur l'appartement (qui est l'ID appartement de cet appartement) et la pièce RoomID de la pièce. la table ApartmentRoom dans la base de données et je ne pouvais pas le faire jusqu'à présent.Si je ne me trompe pas jusqu'ici, dans ce cas, que dois-je faire?
- Dois-je créer un autre référentiel comme ApartmentRoomRepository implémentant l'interface IRepository et appeler la méthode d'insertion de ApartmentRoomRepository dans la méthode Ajouter dans la RoomController? (Cette approche ne semble pas correcte, pour autant que je comprenne mais je ne suis pas sûr.)
- Au lieu de la première option, devrais-je créer ApartmentRoomViewModel? Dans ce cas, comment puis-je insérer ApartmentID de la pièce avec RoomID de la pièce à la table ApartmentRoom?
EDIT 1: J'utilise l'approche Database First.
EDIT 2: J'ai trouvé la solution et partagé comme réponse ci-dessous.
je suppose l'ID dans roomViewModel est égal à zéro lorsqu'elle est introduite dans le contrôleur. Peut-être que vous pouvez également essayer quelque chose comme 'Room.ApartmentRoom.ApartmentID = roomViewModel.ApartmentNameID; Room.ApartmentRoom.RoomID = roomViewModel.RoomID; 'Je sais que RoomID est toujours zéro à ce stade, mais lorsque vous ajoutez deux entités et que vous les enregistrez ensuite, la base de données crée l'ID pour vous et attribue automatiquement la valeur correcte. Si vous essayez, laissez-moi savoir ce qui se passe. Je suis intéressé. –