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);
'boms.Projectsの=のprojのを試してみてください;'の代わりに 'boms.Projects.Add(PROJ);私はそれを試してみたM.Wiś[email protected]' –
。私はエラー '重大\tコード\t説明\tプロジェクト\tファイル\tライン\t抑制状態 エラー\t CS0266を得た\t暗黙的System.Collections.Generic.ICollection」に型「ERP_System.Model.Projectを」<変換できませんERP_System.Model.Project > '。 ' – active92
' db.Projects.Attach(proj);を削除し、 'Add()'のみを使用するとどうなるでしょう –