简体   繁体   English

与Entity Framework保存多对多关系到MySQL

[英]Saving Many-To-Many Relationship with Entity Framework to MySQL

I have BOM and Project table which are many-to-many. 我有BOM项目表,它们是多对多的。

Following is my code for BOM 以下是我的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; }
}

Below is my code for Project 下面是我的Project代码

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

I'm trying to save a new entry to BOM . 我正在尝试将新条目保存到BOM However, I'm getting null when I try to add Project . 但是,当我尝试添加Project时,我将变为null。 Below is my code to save. 下面是我要保存的代码。

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

Did I miss out anything? 我错过了什么吗?

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

您尝试在需要添加ICollection<T>位置添加单个记录,更改查询并将列表改为单个项目。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM