删除多个实体上的表行拆分时出错

2023-12-09

我想删除拆分为两个实体的表行。

如果我尝试删除主要实体,如果之前我没有使用以下命令加载相关的其他实体,则会收到错误消息context.Entry(...).Reference..

当我要删除整行时,之前检索相关实体是不是有点愚蠢?

如果我继续评论,我会收到以下错误context.Entry(...) line

遇到无效数据。缺少必需的关系。检查 状态条目以确定违反约束的来源。

我添加下面的代码。有人可以帮助我删除拆分实体,而不必先“加载”相关实体吗?

 using System.Data.Entity;
 using System.Linq;

 namespace Split
 {
   class Program
   {
     static void Main(string[] args)
     {
        using (var context = new DataContext())
        {
            var product = new Product()
            {
                Name = "my Article",
                Photo = new ProductPhoto() { PhotoUrl = "http://myfoto.jpg" }
            };

            context.Products.Add(product);
            context.SaveChanges();
        }

        using (var context = new DataContext())
        {
            var product = context.Products.First();
            //context.Entry(product).Reference(e => e.Photo).Load();
            context.Products.Remove(product);
            context.SaveChanges();
        }
     }
   }

  class Product
  {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ProductPhoto Photo { get; set; }
  }

  class ProductPhoto
  {
    public virtual int ProductId { get; set; }
    public virtual string PhotoUrl { get; set; }
    public virtual Product Product { get; set; }
  }

  class DataContext : DbContext
  {
    public DataContext()
        : base("name=DefaultConnection")
    {
        Configuration.ProxyCreationEnabled = false;
        Configuration.LazyLoadingEnabled = false;
    }

    public DbSet<Product> Products { get; set; }
    public DbSet<ProductPhoto> ProductPhotos { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Product>()
            .ToTable("Products")
            .HasKey(e => e.Id)
            .HasRequired(e => e.Photo)
            .WithRequiredPrincipal(e => e.Product);

        modelBuilder.Entity<ProductPhoto>()
            .ToTable("Products")
            .HasKey(e => e.ProductId);

        base.OnModelCreating(modelBuilder);
     }
   }
}

最好的方法是使用存根实体:一个只有 Id 值的实体对象:

var product = context.Products.First();
var photo = new ProductPhoto { ProductId = product.ProductId }; // Stub
context.Entry(photo).State = System.Data.Entity.EntityState.Deleted;
context.Products.Remove(product);
context.SaveChanges();

如果你知道一个Product的 Id 您甚至可以删除Product和它的ProductPhoto仅创建两个存根。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除多个实体上的表行拆分时出错 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何使用 LINQ 获取唯一 id 列的最大值

    如何使用 LINQ 以最简单的方式编写此代码 SELECT MAX Game id AS MaxValue FROM Dim Game Try context Dim Games Max g gt g Game id
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 如何在种子实体框架版本 6.x 中通过 AddOrUpdate 方法插入身份[重复]

    这个问题在这里已经有答案了 我有一个具有身份列的实体 作为数据种子的一部分 我想对系统中的 标准数据 使用特定的标识符值 我不想禁用身份 只有我想在迁移种子中设置 IDENTITY INSERT ON 我的代码是 protected ove
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • MySQLNonTransientConnectionException:无法创建与数据库服务器的连接

    我正在处理使用 JDBC 连接到 Amazon RDS 上的 MySQL 数据库的一个奇怪问题 我有两部不同的 Android 手机在同一网络上运行相同的代码 一个连接没有任何问题 另一个给了我以下例外 com mysql jdbc exc
  • C# / Java | AES256加密/解密

    我想加密通过 Java C 套接字 Java 服务器 C 客户端 发送的所有数据 我想使用 AES256 但我无法让 Java 和 C 生成相同的加密代码 任何人都可以给我两个示例 1 个 Java 示例和 1 个 C 示例 它们会生成相同
  • 如何使用 PHP 使用 google API 获取用户“contactid”

    我正在尝试使用 google API 3 0 获取用户联系人以及所有用户详细信息 我能够获得包含用户详细信息的 JSON 响应 url https www google com m8 feeds contacts default full
  • 使用 JavaScript 从数组中删除对象

    如何从数组中删除对象 我希望删除包含名称的对象Kristian from someArray 例如 someArray name Kristian lines 2 5 10 name John lines 1 19 26 96 我想实现 s
  • 切换内部片段

    我用 NavigationView 创建了一个 Activity 用切换按钮打开 public class MainActivity extends AppCompatActivity implements NavigationView O
  • ImportError: libcublas.so.9.0: 无法打开共享对象文件: 在 Ubuntu 16.04.03 上安装张量流时没有这样的文件或目录

    我正在尝试安装带有 cuda 和 gpu 支持的tensorflow 当我尝试导入它时 出现以下错误 Traceback most recent call last File
  • 更改默认短信应用意图在 Android 10 上不起作用

    您好 我正在努力将我的应用程序兼容性更新为 android 10 和 11 之前我将我的应用程序设置为默认短信应用程序并从我的应用程序接收和发送新短信 更改默认短信应用程序的意图在 android 10 以下工作正常 但它不是显示更改 An
  • java中的最小值不起作用

    我需要帮助 因为我的脑细胞无法发现这个程序出了什么问题 这是代码 import java util public class student public static void main String args Scanner sc ne
  • 正则表达式对非捕获组的帮助

    肯定是重复的 但我找不到它 我正在使用一个组来匹配重复的子字符串 然而 我不希望这群人被抓获 这似乎是一个矛盾 明确地说 假设我想找到跟随全大写子集字符串的 3 个精确副本的任何字符 为了 s hjgABABABfgfBBdqCCCugDD
  • 递归清空多个文件的命令

    我想递归地清除给定目录的许多日志文件的内容 而不删除每个文件 用一个简单的命令就可以实现吗 我知道我能做到 gt logs logfile log一份一份的 但是该文件夹中有很多日志 这并不简单 顺便说一句 我正在使用 macOS Sier
  • super() 在构造函数中意味着什么? [复制]

    这个问题在这里已经有答案了 代码是做什么的 super 在构造函数内部做什么 例如 这是我的类的构造函数 public abstract class Rectangle extends AbstractShape private doubl
  • 在Python中查找函数的参数

    我希望能够询问班级的 init 方法的参数是什么 简单的方法如下 cls init func code co varnames code co argcount 但是 如果类有任何装饰器 那么这将不起作用 它将给出装饰器返回的函数的参数列表
  • 检查 xslt 中的条件

    下面是输入 XML 小大 对于较大的输入 XML 以及输出 xml 表示抱歉
  • 访问 Ansible playbook 中的清单主机变量

    在 Ansible 2 1 中 我有一个角色被需要访问主机文件变量的剧本调用 关于如何访问它有什么想法吗 我正在尝试访问ansible ssh host in the test1以下清单的部分host file test1 test 1 a
  • 全栈 NestJS 应用程序中的 OAuth2 流程

    另一个 OAuth2 问题在其他地方没有完全涵盖 我使用 NestJS 后端 React 前端 Passport 和我自己的数据库进行身份验证 尝试添加一个 OAuth2 身份提供商 Google 我将 NestJS 应用程序配置为 OAu
  • Grails:更改 hibernate 方言时 SQL 语法错误

    我正在将 Grails 与 mySQL 数据库一起使用 并且尝试更改数据库引擎 据我研究 这可以最好地做到 dialect org hibernate dialect MyDialect 在 DataSource groovy 配置中 但是
  • 在 Regex/Javascript 中将一个字符交换为另一个字符

    我想做类似的事情 var a This is an A B pattern ABABA a replace A B a replace B A 并让它返回 gt 这是 B A 模式 BABAB 代替 gt 这是一个 A A 模式 AAAAA
  • ElasticSearch:我们可以在索引期间同时应用 n-gram 和语言分析器吗

    非常感谢 Random 我已将映射修改如下 为了进行测试 我使用 电影 作为索引类型 注意 我还添加了 search analyzer 如果没有这个 我就无法得到正确的结果 但是我对使用 search analyzer 有以下疑问 1 我们
  • Tapestry:字符编码问题

    我有一个 Tapestry 应用程序 它从表单中检索数据 将其写入数据库 然后显示结果 只要不使用特殊字符 一切都可以正常工作 例如 文本 Test 将导致 Test 我猜这个问题与错误的字符编码设置有关 Tapestry java 类 C
  • 删除多个实体上的表行拆分时出错

    我想删除拆分为两个实体的表行 如果我尝试删除主要实体 如果之前我没有使用以下命令加载相关的其他实体 则会收到错误消息context Entry Reference 当我要删除整行时 之前检索相关实体是不是有点愚蠢 如果我继续评论 我会收到以