Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架、外键和实体键_C#_.net_Entity Framework - Fatal编程技术网

C# 实体框架、外键和实体键

C# 实体框架、外键和实体键,c#,.net,entity-framework,C#,.net,Entity Framework,我对实体框架和foreignkey有问题。 我有一个表“BC_Message_Assets”,它有3个FK(MessageId、AssetId和StatusId)。 我这样创建我的“MessageAsset” MessageAsset messageAsset = new MessageAsset(); messageAsset.MessageStatusReference.EntityKey = new EntityKey("MyEntities.MessageStatusSet", "Id

我对实体框架和foreignkey有问题。 我有一个表“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();
但我有以下例外:

INSERT语句与外键约束“FK_BC_Message_Assets_BC_Assets”冲突。冲突发生在数据库“Test”表“dbo.BC_资产”列“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”?

正如您所说,您编程了1,1,1,但得到了47,0,1

这是其中两个不期望的值

可能发生的一件事是,还有其他一些代码正在生成这一行。当您保存时,它会先保存带有错误的行,这会引发异常和异常,并且您永远看不到您创建的行


试着只使用问题中的代码编写单元测试。

我的单元测试有问题

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