在EF6中一次保存主键和外键

本文关键字:保存 一次 EF6 | 更新日期: 2023-09-27 18:07:07

我有主表和3个外键表,并试图一次保存所有表。

 public partial class meeting_abstract
 {
     public int meeting_abstract_id { get; set; }
     public int meeting_id { get; set; }
     public System.DateTime submission_date { get; set; }

     public virtual ICollection<abstract_author> abstract_author { get; set; }
     public virtual ICollection<abstract_category> abstract_category { get; set; }
     public virtual ICollection<abstract_questions> abstract_questions { get; set; }
}

var meeting_abstract = new meeting_abstract();
 meeting_abstract.meeting_id = meetingAbstract.Meeting.meeting_id;
 meeting_abstract.submission_date = DateTime.Now;
 meeting_abstract.abstract_questions = new Collection<abstract_questions>();
 var abstractQuestion = new abstract_questions();
  abstractQuestion.meeting_question_id = Convert.ToInt32(meetingAbstract.AbstractTitleInEnglishId);
  abstractQuestion.abstract_question_answer = meetingAbstract.AbstractTitleInEnglishText;
  meeting_abstract.abstract_questions.Add(abstractQuestion);
  abstractQuestion = new abstract_questions();
  abstractQuestion.meeting_question_id = Convert.ToInt32(meetingAbstract.AbstractTitleInLanguageId);
  abstractQuestion.abstract_question_answer = meetingAbstract.AbstractTitleInLanguageText;
  meeting_abstract.abstract_questions.Add(abstractQuestion);
  meeting_abstract.abstract_author.Add(meetingAbstract.primaryAuthor);
 var abstractCategory = new abstract_category()
  {
       meeting_category_id = meetingCategory.meeting_category_id
    };
    meeting_abstract.abstract_category = new Collection<abstract_category>();
    meeting_abstract.abstract_category.Add(abstractCategory);
 _abstractRewriteEntities.meeting_abstract.Add(meeting_abstract);
  _abstractRewriteEntities.SaveChanges();

怎么了?我不能全部存起来吗?

在EF6中一次保存主键和外键

当添加多个条目时,使用定义为标识的属性,您将需要为这些实体提供一个唯一的键,尽管它最终将由db设置。在我们的项目中,我们通过为该实体定义一个部分类来做到这一点,并且在OnCreated中确保它们具有标识的唯一值。例如:

public partial class abstract_questions
    {
        private static int _newIdentity = 0;
        partial void OnCreated()
        {
            //Set an identity value so when two new entities
                    // are created Entity Framework doesn't whinge 
                    // on the server because of duplicate keys
            _newIdentity = _newIdentity - 1;
                    // Set whatever is defined as the identity/pk property
            this.Id = _newIdentity;
        }