C# 多对多-在MVC中创建新位置以存在表

C# 多对多-在MVC中创建新位置以存在表,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,如何向中已存在的订单添加其他职位 控制器MVC? 我尝试了以下方法,但不起作用(PartialViewResult\u AddPost) 错误消息-保存未公开其关系的外键属性的实体时出错。EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参见InnerException 公共类秩序 {[关键] 公共int IdOrder{get;set;} 公共字符串用户标识{get;set;} 公共虚拟用户

如何向中已存在的订单添加其他职位 控制器MVC? 我尝试了以下方法,但不起作用(PartialViewResult\u AddPost) 错误消息-保存未公开其关系的外键属性的实体时出错。EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参见InnerException

公共类秩序
{[关键]
公共int IdOrder{get;set;}
公共字符串用户标识{get;set;}
公共虚拟用户用户{get;set;}
公共int IdOrderAttachment{get;set;}
公共虚拟医嘱附件医嘱附件{get;set;}
公共虚拟ICollection雇员{get;set;}
[必需(ErrorMessage=“指定订单接受日期”)]
[显示(Name=“订单接受日期”)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
公共DateTimeDateOfAcceptance{get;set;}
[显示(Name=“完工计划日期”)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
公共日期时间?完成计划的日期{get;set;}
[显示(Name=“结束日期”)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
公共日期时间?结束日期{get;set;}
[必需(ErrorMessage=“输入主题”)]
[MaxLength(200,ErrorMessage=“名称最多200个字符”)]
[显示(Name=“Subject”)]
公共字符串主题{get;set;}
//多对多
公共虚拟ICollection位置列表{get;set;}
}
公共阶级地位
{
[关键]
公共int IdPosition{get;set;}
[列(TypeName=“nvarchar(MAX)”)]
[显示(Name=“Description”)]
[UIHint(“tinymce\u jquery\u full”),AllowHtml]
公共字符串说明{get;set;}
公共虚拟ICollection订单列表{get;set;}
}
//多对多映射
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(s=>s.PositionList)
.WithMany(c=>c.OrderList)
.Map(cs=>
{
cs.ToTable(“订单位置”);
cs.MapLeftKey(“IdOrder”);
cs.MapRightKey(“IdPosition”);
});
[HttpPost]
[ValidateAntiForgeryToken]
公共PartialViewResult\u AddPost(内部IdOrder)
{
var findOrder=db.Order.Find(IdOrder);
if(ModelState.IsValid)
{
位置=新位置{Description=“Test”};
db.位置.连接(位置);
findOrder.PositionList.Add(职位);
db.SaveChanges();
}
返回PartialView();
}

您是否试图创建一个新的
职位
或只是链接到现有的
职位
?Próbne utworzenie nowego elementu na zamówienie z elementami elementami。添加另一项。我不确定是否遵循最后一条评论。无论如何,如果您想添加新的位置和链接,请替换
db.position.Attach(位置)带有
db.Position.Add(位置)。伊万谢谢,我实际上用错了方法。现在它很好地添加了一个新的位置-非常感谢您的及时帮助。您是在尝试创建一个新的
位置
,还是仅仅链接到现有的
位置
?Próbne utworzenie nowego elementu na zamówienie z elementami elementami elementami。添加另一项。我不确定是否遵循最后一条评论。无论如何,如果您想添加新的位置和链接,请替换
db.position.Attach(位置)带有
db.Position.Add(位置)。伊万谢谢,我实际上用错了方法。现在它很好地添加了一个新的职位-非常感谢您的及时帮助。
public class Order
    {   [Key] 
        public int IdOrder { get; set; }
        public string UserId { get; set; }
        public virtual User User { get; set; }
        public int IdOrderAttachment { get; set; }
        public virtual OrderAttachment OrderAttachment { get; set; }
        public virtual ICollection<Employee> Employee { get; set; }
        [Required(ErrorMessage = "Specify the date of order acceptance")]
        [Display(Name = "Date of acceptance of the order")]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTimeDateOfAcceptance  { get; set; }
        [Display(Name = "Date of completion planning")]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime? DateOfCompletionPlanning { get; set; }
        [Display(Name = "End Date")]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime? EndDate { get; set; }
        [Required(ErrorMessage = "Enter the subject")]
        [MaxLength(200, ErrorMessage = "Name max 200 characters")]
        [Display(Name = "Subject")]
        public string Subject { get; set; }
       //many to many
        public virtual ICollection<Position> PositionList { get; set; }
    }
    public class Position
    {
        [Key]
        public int IdPosition { get; set; }
        [Column(TypeName = "nvarchar(MAX)")]
        [Display(Name = "Description")]
        [UIHint("tinymce_jquery_full"), AllowHtml]
        public string Description { get; set; }
        public virtual ICollection<OrderPosition> OrderList { get; set; }
    }
    //Map many to many 
    base.OnModelCreating(modelBuilder);

                modelBuilder.Entity<Order>()
                   .HasMany<Position>(s => s.PositionList)
                   .WithMany(c => c.OrderList)
                   .Map(cs =>
                   {
                       cs.ToTable("OrderPosition");
                       cs.MapLeftKey("IdOrder");
                       cs.MapRightKey("IdPosition");
                   });

[HttpPost]
            [ValidateAntiForgeryToken]
            public PartialViewResult _AddPost(int IdOrder)
            {
                var findOrder = db.Order.Find(IdOrder);         
                if (ModelState.IsValid)
                {
                    Position position = new Position { Description = "Test"};
                    db.Position.Attach(position);
                    findOrder.PositionList.Add(position);
                    db.SaveChanges();

                }
                return PartialView();
            }