c# - EF Core 1:1 关系?
问题描述
我想要的桌子看起来像这样......
Identity | Id (PK), Tag
Character | IdentityId (FK, PK), Health
字符表应该准确引用标识表的一行......并且标识表不应该引用任何其他 1:0。
我现在的模型看起来像这样......
/// <summary>
/// Represents an identity in our database.
/// </summary>
public class Identity {
public long Id { get; set; }
public string Tag { get; set; }
}
/// <summary>
/// Represents an character ingame with all his attributes.
/// </summary>
public class Character {
public Identity Identity { get; set; }
public float Health { get; set; }
}
modelBuilder.Entity<Identity>(entity => {
entity.ToTable("identity");
entity.HasKey(e => e.Id);
});
modelBuilder.Entity<Character>(entity => {
entity.ToTable("character");
// entity.HasKey(e -> e.Identity.Id); DOES NOT WORK
entity.Navigation(character => character.Identity).AutoInclude();
});
这样做的问题是对字符内部身份的引用不算作主键......也不是外键。
e -> e.Identity.Id
由于某种原因不起作用并导致错误告诉我这是不可能的。
我希望Identity
Character 内部算作他的主键,同时仍然是对 Identity-Table (外键)内行的引用。然而,身份表不应引用该字符。
这可能吗 ?如果是这样……怎么办?
解决方案
您可以在 Identity 类中创建一个属性
public class Identity {
public long Id { get; set; }
public string Tag { get; set; }
public Character Character { get; set; }
}
然后你的模型变成
modelBuilder.Entity<Identity>()
.HasOne(x => x.Character)
.WithOne(x => x.Identity)
.HasForeignKey<Character>(x => x.YourFkKey);
推荐阅读
- elasticsearch - kibana 仪表盘上的 IIS 日志必备基础知识
- excel - 仅针对特定用户名打开工作簿时自动运行的宏
- android - 等待凌空响应,然后更新 ListView
- clojurescript - 如何在 ClojureScript 中编写不可知的 JavaScript 库?
- c# - 如何在 selenium c# 中为异常截屏
- javascript - 在javascript中用reg exp替换'&'字符
- actions-on-google - Actions on Google:测试版被拒绝
- javascript - 监视 vuejs 中动态变化的对象的变化
- angular-cli - ng --version 显示 Angular CLI: 1.5.4 即使在升级后
- database - Netezza 性能优化