2017-01-03 4 views
1

Ich habe BOM und Projekt Tabelle, die viele-zu-viele sind.Viele-zu-viele Beziehungen zwischen Entity Framework und MySQL speichern

Im Anschluss an mein Code für BOM

public class BOM 
{ 
    public int Id { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    [StringLength(OwnConstants.StringLengthShort)] 
    public string BOMRevision { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    [Index("BOM Code", 1, IsUnique = true)] 
    [StringLength(OwnConstants.StringLengthShort)] 
    public string BOMCode { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    [StringLength(OwnConstants.StringLengthShort)] 
    public string Title { get; set; } 

    public virtual ICollection<Project> Projects { get; set; } 

    public virtual ICollection<BOMDetail> BOMDetails { get; set; } 
} 

Unten ist mein Code für Projekt

public class Project 
{ 
    public int Id { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    [Index("Project Code", 1, IsUnique = true)] 
    [StringLength(OwnConstants.StringLengthShort)] 
    public string ProjectCode { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    [Index("Description", 1, IsUnique = true)] 
    [StringLength(OwnConstants.StringLengthShort)] 
    public string Description { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "ThisFieldIsRequired")] 
    public int? CustomerId { get; set; } 

    public virtual Customer Customer { get; set; } 

    public virtual ICollection<BOM> BOMs { get; set; } 
} 

Ich versuche einen neuen Eintrag zu BOM zu speichern. Ich bekomme jedoch null, wenn ich versuche, Project hinzuzufügen. Unten ist mein Code zum speichern.

public override void Save() 
    { 
     using (var db = new ApplicationDbContext()) 
     { 
      var currentID = (Entity as BOM).Id; 
      var ExistingBOM = db.BOMs.SingleOrDefault(x => x.BOMCode == BOMCodeTextEdit.Text); 
      if (ExistingBOM != null) 
      { 
       XtraMessageBox.Show("Record Exist", "Error", MessageBoxButtons.OK); 
       return; 
      } 

      if (currentID == 0) 
      {     
       BOM boms = new BOM() 
       { 
        BOMRevision = BOMRevisionTextEdit.Text, 
        BOMCode = BOMCodeTextEdit.Text, 
        Title = TitleTextEdit.Text, 
       }; 

       Project proj = new Project(); 
       int Project_Id = Convert.ToInt32(ProjectsLookUpEdit.EditValue); 
       proj = db.Projects.SingleOrDefault(x => x.Id == Project_Id); 
       db.Projects.Attach(proj); 
       boms.Projects.Add(proj); // <== getting null here 
      } 

      db.SaveChanges(); 
      XtraMessageBox.Show("Save Successfully", "Information", MessageBoxButtons.OK); 
     } 
    } 

Habe ich etwas verpasst?

Aktualisiert-Code

int Project_Id = Convert.ToInt32(ProjectsLookUpEdit.EditValue); 
var proj = db.Projects.Where(x => x.Id == Project_Id).ToList(); 
boms.Projects.Add(proj); 
db.BOM.Add(boms); 
+0

Versuchen 'boms.Projects = proj;' 'statt boms.Projects.Add (proj);' –

+0

@ M.Wiśnicki habe ich es versucht. Ich habe einen Fehler 'Severity \t-Code \t Beschreibung \t Projekt \t Datei \t Linie \t Unterdrückungszustand Fehler \t CS0266 \t kann nicht implizit konvertiert Typ‚ERP_System.Model.Project‘auf‚System.Collections.Generic.ICollection '. Eine explizite Konvertierung existiert (fehlt Ihnen ein Cast?) ' – active92

+0

Was ist, wenn Sie' db.Projects.Attach (proj) löschen; 'und nur' Add() ' –

Antwort

0

Sie einzelne Datensatz hinzufügen versuchen, wo Sie ICollection<T> hinzufügen müssen, ändern Sie Ihre Abfrage und nehmen Liste stattdessen einzelne Artikel.

var projs =db.Projects.Where(x => x.Id == Project_Id).ToList(); 
Verwandte Themen