首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有mysql的实体框架,没有主键的实体

有mysql的实体框架,没有主键的实体
EN

Stack Overflow用户
提问于 2016-10-11 17:07:35
回答 2查看 204关注 0票数 0

我使用EF与MySQL的外部数据库(数据库从其他项目,刚刚连接到我的)。所以我不能改变数据库结构。

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

我认为只读表不会有任何问题,我只需要为任何填充的实体添加键属性。但是,如果我需要向该表添加行,并且在OK上具有相同的值,该怎么办?我会得到相同值的主键已经存在的错误...

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

EN

回答 2

Stack Overflow用户

发布于 2016-10-11 19:21:08

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

代码语言:javascript
复制
var data = db.TheTable.Where(...).AsNoTracking().ToList();

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

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

代码语言:javascript
复制
var row = ...;
db.TheTable.Add(row);
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;
// now you can add the row again

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

代码语言:javascript
复制
var row = ...;
db.TheTable.Attach(row);
db.TheTable.Remove(row);
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;

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

代码语言:javascript
复制
var row = ...;
db.Entry(row).State = EntityState.Deleted;
db.SaveChanges();
db.Entry(row).State = EntityState.Detached;

但是我不知道有多少行会被删除,如果你尝试删除有重复的行。

票数 1
EN

Stack Overflow用户

发布于 2016-10-11 17:21:48

每个表都必须有一个主键。我不知道您是否可以更改模式,但是,一个解决方案是在这些表上添加一个自动增量主键,并将该新列用作实体框架键。

这样,您可以插入具有相同值的行,同时拥有唯一的行标识符。将每一列都添加到主键约束是一种丑陋的解决方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39973873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档