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