首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法插入重复的密钥。复合主键。ASP.NET实体框架

无法插入重复的密钥。复合主键。ASP.NET实体框架
EN

Stack Overflow用户
提问于 2020-04-08 16:06:54
回答 1查看 171关注 0票数 0

我正在尝试使用实体框架创建应用程序。

这是我想要做的(每个实体也有Id ):

在本例中,我想使用复合主键(PatientId + DiagnosisId)。在Patient model类中有一个诊断集合:

代码语言:javascript
运行
AI代码解释
复制
public ICollection<Diagnosis> Diagnoses { get; set; }

public class Diagnosis
{
    [Required]
    [MaxLength(200)]
    public String Type { get; set; }
    public String Complications { get; set; }
    public String Details { get; set; }

    public Int32 DiagnosisId { get; set; }

    public Patient Patient { get; set; }
    public Int32 PatientId { get; set; }
}

同样在我定义的数据库上下文中

代码语言:javascript
运行
AI代码解释
复制
public DbSet<Diagnosis> Diagnoses { get; set; }

代码语言:javascript
运行
AI代码解释
复制
modelBuilder.Entity<Diagnosis>().HasKey(x => new { x.DiagnosisId, x.PatientId });

OnModelCreating方法中创建复合主键。

在一个ASP.NET MVC CRUD控制器中,我创建了Diagnosis,每次DiagnosisId都是相同的= 0。而且我不能将新数据粘贴到数据库中,因为它就像是重复的。这是我在Pastebin上的create post方法,如果它能有所帮助的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 16:13:01

首先是父键:

代码语言:javascript
运行
AI代码解释
复制
modelBuilder.Entity<Diagnosis>().HasKey(x => new { x.PatientId, x.DiagnosisId });

因为你想要一个特定专利的所有诊断信息存储在一起。

并且您需要请求由数据库生成密钥。对于EF Core its:

代码语言:javascript
运行
AI代码解释
复制
modelBuilder.Entity<Diagnosis>().Property(r => r.DiagnosisId).ValueGeneratedOnAdd();

对于EF6,它是:

代码语言:javascript
运行
AI代码解释
复制
modelBuilder.Entity<Diagnosis>().Property(r => r.DiagnosisId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61105090

复制
相关文章
使用 Excel和 Python从互联网获取数据
互联网上有极其丰富的数据资源可以使用。使用Excel可以自动读取部分网页中的表格数据,使用Python编写爬虫程序可以读取网页的内容。
Python编程与实战
2022/10/05
4K0
使用 Excel和 Python从互联网获取数据
聊聊eventhorizon的Aggregate
eventhorizon/aggregatestore/model/aggregatestore.go
code4it
2021/03/31
4260
聊聊eventhorizon的Aggregate
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2018/01/25
9.4K0
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。 其实可以通过 mybatis 的 selectKey 标签来解决这个问题。  selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如: <selectKey resultType="int" order="AFTER" keyProperty="id"> SELECT
似水的流年
2018/03/28
3.9K0
从已知探索未知的设计之道
在寻找如何更好的“发现-解决问题”过程中,受到MIT媒体实验室教授Neri Oxman文章《Design and Science - Krebs Cycle of Creativity》一文启发,区别于“点对点”的发现-解决问题,为了从更高角度更好的解决问题,类比克雷布斯循环和创造力的克氏循环(KCC),将“发现-解决”问题/机会点这一过程整体系统化,尝试提出系统性解决问题之思考-行动模型Krebs Cycle of Design,并以空间Feeds信息流产品举例如何实践Krebs Cycle of Des
腾讯ISUX
2018/06/29
9530
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2019/12/06
3.5K0
Python获取Windows的CPU数量
通过取得Windws下的一个环境变量: NUMBER_OF_PROCESSORS实现。
用户8983410
2021/11/02
2K0
Flink 从Checkpoint中恢复作业
如果我们的任务已经执行很长时间,突然遇到故障停止,那么中间过程处理结果就会全部丢失,重启后需要重新从上一次开始的位置消费,这会花费我们很长的时间。这种结局显示我们不能接受,我们希望的是作业在故障失败重启后能保留之前的状态并能从失败的位置继续消费。可以通过如下配置保存处理状态:
smartsi
2020/12/29
6K0
聊聊eventhorizon的Aggregate
eventhorizon/aggregatestore/model/aggregatestore.go
code4it
2021/04/16
4810
MongoDB 中Aggregate使用与相关限制
官网:https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
王小明_HIT
2020/02/18
9480
使用snakemake编写生信分析流程
The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment.
生信探索
2023/05/23
9130
Android 动态获取资源的ID
但是对于以上做法, 官方并不推荐,并且 getIdentifier这个写library的时候, 如果里面需要引用主程的资源且R所在的包名未知时还是很有用的(如果在gradle里修改了packageName, R所在的包名是和packageName不一样的,没法反射),当然也是有解决的办法: 如果愿意,是可以根据业务拼接出 “package_name.R.drawable.class” 的。但是如果这样的话,视具体情况一定有更好的解法。
胖虎哥
2023/05/10
2.6K0
getIdentifier获取资源id
首先我想到的是反射,但是经过实验发现提示报错no emoty constructor。
提莫队长
2019/02/21
4.1K0
Spark MLlib 之 aggregate和treeAggregate从原理到应用
由于treeAggregate是在aggregate基础上的优化版本,因此先来看看aggregate是什么.
用户1154259
2018/07/31
8640
Spark MLlib 之 aggregate和treeAggregate从原理到应用
jmeter Aggregate Graph
"Aggregate Graph" 是 JMeter 中的一个监听器,它以图形的形式展示了性能测试的汇总结果。
运维开发王义杰
2023/08/16
2460
jmeter Aggregate Graph
Snakemake入门
Snakemake 是一个基于Python3的用于构建和管理数据分析工作流程的免费工具。
小汪Waud
2023/09/18
3480
Snakemake入门
Mybatis获取自增长的主键id
这个问题主要是今天项目中新加的一个需求导致的,主要过程是这样的,因为每个项目里面用户,角色,权限这三者是密不可分的,在数据库中就可以通过下面这张图来表达他们三者之间的关系:
萌萌哒的瓤瓤
2021/01/13
3.5K0
Mybatis获取自增长的主键id
jmeter aggregate report
Aggregate Report 是 JMeter 中的一个元素,用于收集测试结果并生成汇总报告。这个报告提供了一种简洁的方式来看到所有请求的性能统计数据。以下是 Aggregate Report 中包含的主要信息:
运维开发王义杰
2023/08/16
2550
jmeter aggregate report
WordPress 如何获取分类/标签的ID
鼠标移动到编辑处,看到浏览器底部出现链接,其中的tag_ID=5中这个5就是分类的ID,标签同理。
可定
2020/04/20
6K0
WordPress 如何获取分类/标签的ID
点击加载更多

相似问题

如何修复“appendingPathComponent”不可用:在URL错误上使用appendingPathComponent

11

appendingPathComponent‘不可用:在URLinstad.a上使用appendingPathComponent

21

解决appendingPathComponent错误的模糊使用

11

Swift 3中“appendingPathComponent”错误的模糊用法

15

appendingPathComponent之后的不同路径(_:)

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档