gpt4 book ai didi

c# - Entity Framework 有mysql,实体没有PK

转载 作者:行者123 更新时间:2023-11-29 11:14:27 25 4
gpt4 key购买 nike

我使用 EF 和 MySQL 作为外部数据库(来自刚刚连接到我的其他项目的数据库)。所以我无法更改数据库结构。

数据库有一些没有 PK 的表,但如果我是对的,EF 实体应该有主键。

我认为仅读取表格不会有任何问题,我只需为任何填充的实体添加 Key 属性。但是,如果我需要向该表添加具有相同值的行,就OK了,该怎么办?我会收到错误消息,表明具有相同值的 PK 已存在...

我需要任何帮助或建议如何使用该表格。提前致谢

最佳答案

您可以将所有列标记为 PK 的一部分并在无跟踪模式下读取实体:

var data = db.TheTable.Where(...).AsNoTracking().ToList();

如果您需要添加具有相同值的新行 - 这是可以的,除非您的数据库上下文中已经有相同的行。在“无跟踪”模式下,仅当您添加具有相同值的行时才会发生这种情况。

解决方法:在单独的操作中添加行,在 SaveChanges 后分离实体:

var row = ...;
db.TheTable.Add(row);
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;
// now you can add the row again

如果您需要删除未跟踪的行 - 您必须先附加它:

var row = ...;
db.TheTable.Attach(row);
db.TheTable.Remove(row);
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;

或者您可以手动更改行状态:

var row = ...;
db.Entry(row).State = EntityState.Deleted;
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;

但我不知道如果您尝试删除具有重复项的行,将会删除多少行。

关于c# - Entity Framework 有mysql,实体没有PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39973873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com