C# 实体框架、外键和实体键
我对实体框架和foreignkey有问题。 我有一个表“BC_Message_Assets”,它有3个FK(MessageId、AssetId和StatusId)。 我这样创建我的“MessageAsset”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
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),它可以毫无问题地工作。。。奇怪