当前位置: 首页 > 面试题库 >

实体框架拆分表删除

商焕
2023-03-14
问题内容

我正在使用EF 4 STE对附件对象进行建模。该 附件
包含了名称,描述,日期,以及最重要的数据(byte[])。为了优化加载,我不想在绝对必要之前(即当用户Download从客户端单击时)检索Data属性。

为了遵循这种方法,我使用了此处描述的表拆分技术。我将“ 附件” 表分为“ 附件”
(“名称”,“描述”,“日期”)和“ AttachmentData” (数据)。在我的EF模型中,这是一对一的关系。一切正常,直到我尝试删除没有
AttachmentData附件 (即attachment.AttachmentData == null)。我得到以下异常:

遇到无效的数据。缺少必需的关系。检查StateEntries以确定约束违例的来源。

现在,我的数据访问代码很简单:我称上下文为,ApplyChanges()后跟SaveChanges()

我已经尝试了一个简单的删除SQL函数,并将其映射到两个实体,并且确实有效。然而,它打破了插入。我似乎无法将所有属性的插入功能映射到两个实体。

我可以尝试其他一些选择吗?Attachment和AttachmentData之间的关系可以是可选的吗?当我将其设为1到0+时,我得到一个映射错误,说Their primary keys may collide

公开接受任何建议。

谢谢!


问题答案:

解决方案类似于链接的问题,但是您必须使用STEs的特定功能- ApplyChanges

context.Attachments.ApplyChanges(att);
if (context.ObjectStateManager.GetObjectStateEntry(att).State == EntityState.Deleted)
{
    var data = new AttachmentData() {Id = att.Id};
    context.AttachmentDataSet.Attach(data);
    context.AttachmentDataSet.DeleteObject(data);
}
context.SaveChanges();


 类似资料:
  • 我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s

  • 实体框架5.0首先使用现有数据库编写代码。使用电动工具对类进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子的外键返回到父母ID。ID都是带有自动增量的int。我添加了许多父母记录,现在想将孩子记录添加到特定的父母。我能看到的唯一方法是通过在父母表中搜索名称或其他属性并返回ID来找到适当的父母ID。然后在添加孩子时在外键属性中使用该ID。我不想设置新父母,所以这是将孩子添加到现有父母的唯

  • 问题内容: 我需要在每个用户已经有一个ID作为键的数据库中存储大量用户数据。但是,这些用户全部来自更大的用户池,因此,该ID不会增加并且无法自动生成。我需要能够手动设置ID。 是否有捷径可寻? 问题答案: 我进行了一些测试,这似乎对我在EF 7.0.0 rc1-final上有效: 我的测试代码: (完整的程序代码在这里:http : //pastebin.com/hSs9HZCP) 它可以正确插入

  • 我有2个实体类(表A的实体和表B的实体)。表 A 链接到表 B。因此,实体类具有 B 实体的对象列表,并声明如下图所示。 @OneToMany(mappedBy=“AEntity”,cascade=CascadeType.REMOVE,fetch=FetchType.LAZY)private List items=new ArrayList(); 如果我使用“entityManager.remov

  • 如何模拟AsNoTracking方法? 在下面的示例中,DbContext已经注入到服务类中,如果我从GetOrderedProducts方法中移除AsNoTracking扩展方法,它可以正常工作,但是with AsNoTracking测试失败,因为它返回null。我还试图模拟AsNoTracking以返回正确的值,但它不起作用。

  • 我有一个在Azure中运行的Web应用程序。我设置了实体框架来访问我的数据库。“编辑”和“删除”视图在我的本地计算机上以及部署到临时插槽时工作。当我推到生产槽时,我得到一个错误。出于某种原因,控制器没有读取记录ID,即使它显然是在URL中传递的,并且是在RouteConfig中设置的。 更新:这是请求。https://teamweb.azurewebsites.net/JobTracking/Ed