c# - 错误:IEntityChangeTracker 的多个实例无法引用实体对象
问题描述
我正在尝试在数据库中添加一个新实体,但在添加时我收到以下错误:
ERROR : An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
Object 类看起来像这样:
public partial class orders
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public orders()
{
this.details = new HashSet<detail>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public decimal id { get; set; }
public decimal locationID { get; set; }
public decimal contactID { get; set; }
public string type { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<detail> details { get; set; }
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
public virtual contact contact { get; set; }
public virtual location location { get; set; }
}
locationID
并且是指向和表contactID
的外键值。两者都引用了其中的一些其他表。location
contact
contact
location
我已经设置了contact
和的值location
。各自id
的location
和contact
那里的表有
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
选项 和 应该在savechanges()
订单表上生成并映射到locationID
和中contactID
。这些值由 DB 中的触发器生成。
保存数据的代码如下
foreach (DbEntityEntry dbEntityEntry in _db.ChangeTracker.Entries().ToArray())
{
if (dbEntityEntry.Entity != null)
{
dbEntityEntry.State = System.Data.Entity.EntityState.Detached;
}
}
_db.Entry(order).State = System.Data.Entity.EntityState.Added;
_db.orders.Add(order);
_db.SaveChanges();
我对这一切都很陌生,我可能不了解引用的实体插入是如何工作的。
我也无法在代码端处理 ID 的生成。
你们能帮我解决这个问题吗?预先感谢
解决方案
您使用更改跟踪器是否有任何特定原因?对于一般用途,您应该只使用您的DbContext
( _db
) 和Add
item 然后SaveChanges
。从 DbContext 中获取实体后,ChangeTracker 会通过您对实体进行的操作自动执行。
_db.orders.Add(order);
_db.SaveChanges();
应该就是这些了,除非还有什么你没有提到的。
推荐阅读
- javascript - 通过 GupShup 发送图像
- angular - HTTP 获取请求基本身份验证?
- php - Visual Studio Code 找不到 PHP 函数 - 也许是“require_once”语法?
- java - 为什么可以对抽象类做“新”?
- c - C - 加速二进制文件 IO
- python - 如何在忽略其他项目的同时重命名列表中的选定项目?
- html - 使用具有给定高度和宽度的 html 标记时,在 QML Text 中垂直对齐文本和图像
- java - 我们可以使用响应实体来处理异常而不是自定义期望吗
- node.js - 是否可以使用不和谐机器人将音频从我的 DAW 流式传输到不和谐?
- java - Jackson 序列化期间的必填字段