Как сохранить внешний ключ в нескольких таблицах asp.net mvc entity - PullRequest
0 голосов
/ 27 апреля 2018

Я делаю функциональность, которая позволяет администратору настраивать параметры почтовой рассылки для пользователей. Есть несколько объектов:

  1. Здания

  2. Услуга

  3. Пользователи

В форме конфигурации администратор может выбрать несколько зданий, несколько служб и несколько пользователей. Таким образом, все выбранные пользователи будут получать почту для всех выбранных зданий и служб. В представлении у меня есть 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, я вижу, что результаты вставляются во все таблицы, но им не хватает внешнего ключа из таблицы настроек.

Как я могу также сохранить ключ из таблицы настроек в этих таблицах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...