实体框架,外键和实体键

3

我在使用实体框架和外键时遇到了问题。 我有一张名为“BC_Message_Assets”的表,其中有3个外键(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();

但是我遇到了以下异常:

插入语句与外键约束“FK_BC_Message_Assets_BC_Assets”冲突。该冲突发生在数据库“Test”中,“dbo.BC_Assets”表中的'Id'列。 该语句已终止。

当我查看查询时,我注意到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”?

2个回答

1

我的单元测试出了问题。

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


0

你说你编程时输入了1,1,1,但得到的结果是47,0,1。

有两个值不符合预期。

可能是其他代码生成了这一行数据。当你保存时,会先保存出错的行,导致异常抛出,你就看不到自己创建的行了。

尝试使用你提供的代码编写一个单元测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接