sql - Entity Framework Core:使用没有外键的导航属性
问题描述
我有以下对象模型:
public class SharingRelation:BaseEntity
{
public Guid? Code { get; set; }
public string Value { get; set; }
}
public class SecondLevelShareEntity : BaseEntity
{
public string Name { get; set; }
public Guid? SharingCode { get; set; }
public List<SharingRelation> SharingRelations { get; set; }
}
在我的数据库中(它可能是糟糕的数据库设计,但我需要回答这个问题以进行研究),SharingRelation
是某种依赖SecondLevelShareEntity
于Code == SharingCode
值的实体。SecondLevelShareEntity
我可以有两个具有相同SharingCode
值的类型实体。因此,对于它们中的每一个,我需要SharingRelation
根据Code
和SharingCode
值获取所有相关对象。我可以使用 SQL 并加入这些列。但是如何使用 EF Core 和导航属性来做到这一点(Include()
例如,我想获取所有依赖实体)?当我像这样配置我的实体时
public class SharingRelationEntityTypeConfiguration : BaseEntityTypeConfiguration<SharingRelation>
{
public override void Configure(EntityTypeBuilder<SharingRelation> builder)
{
base.Configure(builder);
builder.HasOne<SecondLevelShareEntity>().WithMany(x => x.SharingRelations).HasForeignKey(x => x.Code)
.HasPrincipalKey(x => x.SharingCode);
}
}
EF Core 创建外键并将其标记为唯一。我显然得到了一个错误,这是不可能有几个SecondLevelShareEntity
相同的SharingCode
System.InvalidOperationException:无法跟踪实体类型“SecondLevelShareEntity”的实例,因为已在跟踪另一个具有键值“{SharingCode: 8a4da9b3-4b8e-4c91-b0e3-e9135adb9c66}”的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。
如何避免创建外键,但继续使用导航属性(据我所知,使用导航的普通查询会生成简单的JOIN
语句)
更新我可以在数据库中提供真实数据。SecondLevelShareEntity
表如下所示:
_id Name SharingCode
----------------------------------------------------------------------
1 "firstSecondLevelEnt" "efcb1c96-0ef1-4bb3-a952-4a6511ab448b"
2 "secondSecondLevelEnt" "efcb1c96-0ef1-4bb3-a952-4a6511ab448b"
SharingRelation
表格如下所示:
_id Value Code
----------------------------------------------------------------------
1 "firstSharingRelation" "efcb1c96-0ef1-4bb3-a952-4a6511ab448b"
2 "secondSharingRelation" "efcb1c96-0ef1-4bb3-a952-4a6511ab448b"
解决方案
推荐阅读
- css - 有没有办法从另一个父文件夹 css react js 导入文件
- big-o - 如何使用 Big-O 的正式定义证明 y = n^2 不属于 O(1)?
- docker - 调整 docker swarm 模式的负载均衡器
- google-sheets - 从 Apps Script google 表格调用 BigQuery 在 BigQuery 中保存的查询
- ios - Stripe 客户端意图错误迅速:没有这样的 payment_intent
- java - 按多个字段分组的流:,管理地图嵌套地图的输出
- flutter - Flutter 中的 ReorderableListview 中无法访问 ReorderableListview.builder 和无物理属性
- c# - 创建类实例时如何将值硬编码到属性变量?
- python - 读取具有两个或多个分隔符的 csv 文件时出现解析错误
- javascript - AJAX响应后jQuery没有找到类