gpt4 book ai didi

c# - Entity Framework 、外键和实体键

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

Entity Framework 和外键有问题。我有一个表“BC_Message_Assets”,它有 3 个 FK(MessageId、AssetId 和 StatusId)。我这样创建我的“MessageAsset”

MessageAsset messageAsset = new MessageAsset();

messageAsset.MessageStatusReference.EntityKey = new EntityKey("MyEntities.MessageStatusSet", "Id", 1);

messageAsset.AssetReference.EntityKey = new EntityKey("MyEntities.AssetSet", "Id", 1);

messageAsset.MessageReference.EntityKey = new EntityKey("MyEntities.MessageSet", "Id", messageId);

context.AddToMessageAssetSet(messageAsset);
context.SaveChanges();

但是我遇到了以下异常:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_BC_Message_Assets_BC_Assets". The conflict occurred in database "Test", table "dbo.BC_Assets", column 'Id'. The statement has been terminated.

当我查看查询时,我注意到 AssetId 的参数值为“0”,尽管我为 EntityKey 提供了“1”。这是生成的查询:

exec sp_executesql N'insert dbo.[BC_Message_Assets]([MessageId], [AssetId], [CompletionTime], [StatusId]) values (@0, @1, null, @2) ',N'@0 int,@1 int,@2 int',@0=47,@1=0,@2=1

我无法解释发生了什么。我在 EntityKey 中硬编码了“1”,但在查询中收到了“0”?

最佳答案

我的单元测试有问题。

但是我找到了问题的原因。问题是我的 BC_Message_Assets 表上的 PK 基于 2 FK(MessageId 和 AssetId)。使用简单的标识符(int + identity),它可以毫无问题地工作......奇怪!

关于c# - Entity Framework 、外键和实体键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1648907/

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