Bonjour,

J'ai encore du mal à comprendre le mécanisme de create, lorsqu'il doit toucher plusieurs tables... J'ai fais pas mal de tuto, mais ça n'avance pas vraiment.

Je dois renseigner deux tables : AlertLog doit enregistrer les données tels que le titre,texte... et AlertMap est la table de mappage entre l'id de l'alerte dans AlertLog l'id de l'auteur, l'id du type d'alerte et l'id de la priorité.

Je dois arriver aussi à synchroniser les clés primaires (ex: AlertID dans AlertLog)/ secondaires (AlertID dans AlertMap).

J'ai tenté une solution, mais cela ne marche pas car j'ai une erreur comme quoi le champ AlertMapID ne peut être null. Alors qu'en principe, un ID doit se générer.

AlertMapControler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
 // GET: AlertMaps/Create
        public ActionResult Create()
        {
            CreateAlertViewModel model = new CreateAlertViewModel();
            ViewBag.AlertModeID = new SelectList(db.AlertMode, "AlertModeID", "AlertModeLabel");
            ViewBag.AlertPriorityID = new SelectList(db.AlertPriority, "AlertPriorityID", "AlertPriorityLabel");
            return View();
        }
 
        // POST: AlertMaps/Create
        // Afin de déjouer les attaques par sur-validation, activez les propriétés spécifiques que vous voulez lier. Pour 
        // plus de détails, voir  http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(CreateAlertViewModel model)
        {
            AlertLog alertlog = new AlertLog();
            AlertMap alertmap = new AlertMap();
            if (ModelState.IsValid)
            {
                int AlertId = (from p in db.AlertLog select p.AlertID).FirstOrDefault();
                if (AlertId == 0)
                    AlertId++;
                else
                    AlertId = (from r in db.AlertLog select r.AlertID).Max() + 1;
 
                int MapId = (from s in db.AlertMap select s.AlertMapID).FirstOrDefault();
                if (MapId == 0)
                    MapId++;
                else
                    MapId = (from t in db.AlertMap select t.AlertMapID).Max() + 1;
 
                var userid = "45d4778b-2b28-45f5-a6e4-5b0b2d3e8f8c";
 
                alertmap.AlertMapID = MapId;
                alertmap.AlertID = AlertId;
                //alertmap.UsersID = User.Identity.GetUserId();
                alertmap.UsersID = userid;
                alertmap.AlertModeID = model.AlertModeID;
                alertmap.AlertPriorityID = model.AlertPriorityID;
                alertlog.AlertID = AlertId;
                alertlog.AlertTitle = model.AlertTitle;
                alertlog.AlertText = model.AlertText;
                alertlog.AlertStartDate = model.AlertStartDate;
                alertlog.AlertEndDate = model.AlertEndDate;
                alertlog.AlertActive = model.AlertActive;
 
 
                db.AlertMap.Add(alertmap);
                db.AlertLog.Add(alertlog);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
 
            return View("Index");
        }
Modele
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
public class CreateAlertViewModel
    {
        [Required]
       // [Display(Name = "Type d'alerte")]
        public int AlertModeID { get; set; }
 
        [Required]
        // [Display(Name = "Priorité de l'alerte")]
        public int AlertPriorityID { get; set; }
 
        [Required]
        //  [Display(Name = "Titre de l'alerte")]
        public string AlertTitle { get; set; }
 
        [Required]
        //  [Display(Name = "Texte de l'alerte")]
        public string AlertText { get; set; }
 
        [Required]
        // [Display(Name = "Date de début d'alerte")]
        public System.DateTime AlertStartDate { get; set; }
 
        [Required]
        // [Display(Name = "Date de fin d'alerte")]
        public System.DateTime AlertEndDate { get; set; }
 
        public bool AlertActive { get; set; }
 
    }
En vous remerciant !