Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Entity framework core EF核心-多拥有类型映射问题_Entity Framework Core - Fatal编程技术网

Entity framework core EF核心-多拥有类型映射问题

Entity framework core EF核心-多拥有类型映射问题,entity-framework-core,Entity Framework Core,我想询问有关在EntityFramework Core-V2.1中构建模型的问题。 第一件事-我想实现的目标如下所述: //我希望此实体存储在数据库中,EntityReference作为自有记录, //存储在同一个表中。 //将有更多类型EntityReference的属性。 公共部分类CdiEmailEvent { 公共重写Guid Id{get;set;} 公共实体引用CdiAccountId 公共实体引用CdiAutomationId } //EntityReference是指向记录的指针

我想询问有关在EntityFramework Core-V2.1中构建模型的问题。 第一件事-我想实现的目标如下所述:

//我希望此实体存储在数据库中,EntityReference作为自有记录,
//存储在同一个表中。
//将有更多类型EntityReference的属性。
公共部分类CdiEmailEvent
{
公共重写Guid Id{get;set;}
公共实体引用CdiAccountId
公共实体引用CdiAutomationId
}
//EntityReference是指向记录的指针,包含目标记录的Id及其类型。
//所以Id不指向CdiEmailEntity记录,而是指向例如帐户或联系人。
//我希望这是CdiEmailEvent中的自有记录。
公共密封类实体引用:IEExtensibleDataObject
{
公共Guid Id{get;set;}
公共字符串逻辑名称{get;set;}
公共字符串名称{get;set;}
公共字符串行版本{get;set;}
}
因此,实际数据可能如下所示:

Id                                      |   CdiAccountId                            |   CdiAccountName  |   CdiAccountLogicalName   |   CdiAutomationId                         |   CdiAutomationName   |   CdiAutomationLogicalName
"18640407-1A44-430A-8267-96BD23CC9EE8"  |   "FBBB4932-C74C-47CE-8D1B-909C5975D945"  |   "Account"       |   "cdi_account"           |   "5496BC1C-C5FD-4AFB-B6D9-913DD5549C13"  |   Automation          |   "cdi_automation"
新建CdiEmailEvent{
Id=“18640407-1A44-430A-8267-96BD23CC9EE8”,
CdiAccountId=新的CdiAccountId{
Id=“FBBB4932-C74C-47CE-8D1B-909C5975D945”,
Name=“Account”,
LogicalName=“cdi\U账户”
},
CdiAutomationId=新的CdiAccountId{
Id=“5496BC1C-C5FD-4AFB-B6D9-913DD5549C13”,
Name=“自动化”,
LogicalName=“cdi\U自动化”
},
...
}
我希望Database表看起来像:

Id                                      |   CdiAccountId                            |   CdiAccountName  |   CdiAccountLogicalName   |   CdiAutomationId                         |   CdiAutomationName   |   CdiAutomationLogicalName
"18640407-1A44-430A-8267-96BD23CC9EE8"  |   "FBBB4932-C74C-47CE-8D1B-909C5975D945"  |   "Account"       |   "cdi_account"           |   "5496BC1C-C5FD-4AFB-B6D9-913DD5549C13"  |   Automation          |   "cdi_automation"
我当前的型号配置是:

modelBuilder
.实体(实体=>
{
entity.HasKey(e=>e.CdiEmailEventId);
entity.OwnsOne(rel=>rel.CdiAccountId);
entity.OwnsOne(rel=>rel.CdiAutomationId);
...
ToTable(“CdiEmailEvents”,this.\u databaseConfig.DatabaseSchema);
});
我遇到的问题是:

System.InvalidOperationException: 'The entity of type 'CdiEmailEvent' is sharing
 the table 'replication.CdiEmailEvents' with entities of type 
'CdiEmailEvent.CdiAutomationId#EntityReference', but there is no entity of this
 type with the same key value '{CdiEmailEventId: 8a99d6ab-cd82-4eb8-b548-50d903d6f26c}' 
that has been marked as 'Added'.'

我猜EF Core试图使用CdiAutomationId作为对CdiEmailEvent的引用。有人知道我如何改变这种行为,并强制EF Core将CdiAutomationId简单地视为一个没有任何键的对象吗?我查阅了EF Core的文档,但在这件事上描述得不太清楚。

对我来说,这听起来不像是映射问题,而是使用问题。什么操作会产生错误?你能提供一个小的代码片段来重现这个问题吗?Ivan,从我看到的表生成脚本来看,它没有将CdiAccountId上的Id视为一个值,而是一个键。它在SaveChanges()上失败创建表[replication]。[CdiEmailEvents]([LogicalName]nvarchar(max)NULL,[EntityState]int NULL,[RowVersion]nvarchar(max)NULL,[Id]uniqueidentifier不为NULL,[CdiEmailEventId]uniqueidentifier不为NULL,[CdiAccountId_LogicalName]nvarchar(max)NULL,[CdiAccountId_Name]nvarchar(max)NULL,[CdiAccountId_RowVersion]nvarchar(max)NULL…'我无法复制。实际上
entity.HasKey(e=>e.CdiEmailEventId);
不使用提供的模型编译。这使我认为问题在于某些基类具有您要覆盖的
Id
属性以及附加的
CdiEmailEventId
属性,这些属性未在此处显示并配置为PK。