Я делаю функциональность, которая позволяет администратору настраивать параметры почтовой рассылки для пользователей. Есть несколько объектов:
Здания
Услуга
Пользователи
В форме конфигурации администратор может выбрать несколько зданий, несколько служб и несколько пользователей. Таким образом, все выбранные пользователи будут получать почту для всех выбранных зданий и служб. В представлении у меня есть 3 списка с несколькими выборками для зданий, служб и пользователей.
Также может быть несколько настроек.
Теперь у меня есть следующие объекты:
public class MailingConfigSetting
{
public int Id { get; set; }
public int SettingId { get; set; }
public string SettingName { get; set; }
public virtual ICollection<MailingConfigUser> MailingConfigUsers { get; set; }
public virtual ICollection<MailingConfigBuilding> MailingConfigBuildings { get; set; }
public virtual ICollection<MailingConfigService> MailingConfigServices { get; set; }
}
public class MailingConfigUser
{
public int Id { get; set; }
public int UserId { get; set; }
public string UserName { get; set; }
}
public class MailingConfigBuilding
{
public int Id { get; set; }
public int BuildingId { get; set; }
public string BuildingName { get; set; }
}
public class MailingConfigService
{
public int Id { get; set; }
public int ServiceId { get; set; }
public string ServiceName { get; set; }
}
Контроллер:
[HttpPost]
public ActionResult New(MailingConfigVM mailingConfigVM)
{
if (!SessionControlService.CheckIsLoginStillTrue(_loginsService, HttpContext))
return RedirectToAction("Login", "Account");
var curUser = _userService.GetUserByEmail(User.Identity.Name);
if (!User.IsInAnyRoles("Admin"))
return RedirectToAction("Index");
if (ModelState.IsValid)
{
using (var domain = new Facility.Data.FacilityEntities())
{
var newSetting = new Facility.Model.MailingConfigSetting
{
SettingName = "testSetting"
};
domain.MailingConfigSettings.Add(newSetting);
foreach (int item in mailingConfigVM.SelectedBuildings)
{
var building = _buildingService.GetBuilding((int)item);
var newSettingBuilding = new Facility.Model.MailingConfigBuilding
{
BuildingId = building.Id,
BuildingName = building.Name,
};
domain.MailingConfigBuildings.Add(newSettingBuilding);
}
foreach (int item in mailingConfigVM.SelectedServices)
{
var service = _serviceService.GetService(item);
var newSettingService = new Facility.Model.MailingConfigService
{
ServiceId = service.Id,
ServiceName = service.Name
};
domain.MailingConfigServices.Add(newSettingService);
}
foreach (int item in mailingConfigVM.SelectedUsers)
{
var user = _userService.GetUser(item);
var newSettingUser = new Facility.Model.MailingConfigUser
{
UserId = user.Id,
UserName = user.UserName
};
domain.MailingConfigUsers.Add(newSettingUser);
}
//domain.MailingConfigBuildings.Add(newSettingBuilding);
domain.SaveChanges();
}
}
return RedirectToAction("Create", "MailingConfig");
}
ViewModel:
public class MailingConfigVM
{
[Display(Name = "Buildings")]
//public IEnumerable<Building> allBuildings { get; set; }
public IEnumerable<SelectListItem> allBuildings { get; set; }
[Display(Name = "Services")]
//public IEnumerable<Facility.Model.Service> allServices { get; set; }
public IEnumerable<SelectListItem> allServices { get; set; }
[Display(Name = "Users")]
//public IEnumerable<User> allUsers { get; set; }
public IEnumerable<SelectListItem> allUsers { get; set; }
public IEnumerable<int> SelectedBuildings { get; set; }
public IEnumerable<int> SelectedServices { get; set; }
public IEnumerable<int> SelectedUsers { get; set; }
}
}
У меня есть 4 таблицы:
1) здания
2) услуги
3) пользователи
4) настройка
Таблицы для зданий, служб и пользователей должны содержать ключ от установочной таблицы.
В контроллере, когда я сохраняю в db, я вижу, что результаты вставляются во все таблицы, но им не хватает внешнего ключа из таблицы настроек.
Как я могу также сохранить ключ из таблицы настроек в этих таблицах?