2017-01-03 7 views
1

私はBOM多対多のプロジェクトテーブルを持っています。以下は、BOMための私のコードですEntity Frameworkと多対多リレーションシップをMySQLに保存

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; } 
} 

は私がBOMに新しいエントリを保存しようとしているプロジェクト

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; } 
} 

ための私のコードです。しかし、私はプロジェクトを追加しようとするとnullになる。以下は私のコードを保存することです。

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); 
     } 
    } 

私は何かを逃しましたか?

あなたは、ICollection<T>を追加するには、クエリを変更し、代わりに単一の項目をリストを取る必要がある単一のレコードを追加しようと

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

'boms.Projectsの=のprojのを試してみてください;'の代わりに 'boms.Projects.Add(PROJ);私はそれを試してみたM.Wiś[email protected]' –

+0

。私はエラー '重大\tコード\t説明\tプロジェクト\tファイル\tライン\t抑制状態 エラー\t CS0266を得た\t暗黙的System.Collections.Generic.ICollection」に型「ERP_System.Model.Projectを」<変換できませんERP_System.Model.Project > '。 ' – active92

+0

' db.Projects.Attach(proj);を削除し、 'Add()'のみを使用するとどうなるでしょう –

答えて

0

更新されたコード。

var projs =db.Projects.Where(x => x.Id == Project_Id).ToList(); 
関連する問題