2017-01-03 4 views
1

У меня есть Спецификация и Проект Таблица, которая является многими для многих.Сохранение отношения «многие-ко-многим» с платформой Entity к MySQL

Ниже мой код 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; } 
} 

Ниже мой код для проекта

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

Я пытаюсь сохранить новую запись в BOM. Тем не менее, я получаю null, когда я пытаюсь добавить Project. Ниже мой код для сохранения.

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

Я пропустил что-нибудь?

Обновленный код

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 (проектируемый);' –

+0

@ M.Wiśnicki Я попробовал. Я получил сообщение об ошибке 'Серьезность \t \t Код Описание \t \t Project File \t \t Line Подавление Государственный Ошибка \t \t CS0266 Не удается неявно преобразовать тип 'ERP_System.Model.Project' в«System.Collections.Generic.ICollection ». Явное преобразование существует (вы пропускаете листинг?) ' – active92

+0

Что делать, если вы удаляете' db.Projects.Attach (proj); 'и используете только' Add() ' –

ответ

0

Вы пытаетесь добавить одну запись, где вам нужно добавить ICollection<T>, изменить запрос и взять список вместо одного пункта.

var projs =db.Projects.Where(x => x.Id == Project_Id).ToList(); 
Смежные вопросы