c# - 当依赖实体只有外键而没有主键时,两个实体之间的 C# EF 关系 0..1-1
问题描述
如何设置两个实体之间的 EF 关系,其中第一个(主)实体具有主键,但第二个(从属)没有 PK,只有外键 - 在第一个实体上。
public class Dogovor
{
public int Key { get;set; }
public string Name { get;set; }
public virtual DogovorStatus Status { get; set; }
}
public class DogovorStatus
{
public int StatusKey { get; set; }
//public int DogovorKey { get; set; } // - no need, because this key is pointed in DogovorConfiguration
}
我试图这样做,但没有成功:
public class DogovorConfiguration : EntityTypeConfiguration<Dogovor>
{
HasKey(v => v.Key);
Property(v => v.Key)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.HasColumnName("DG_Key");
Property(v => v.Name).
.IsRequired()
.HasColumnName("DG_Name");
HasOptional(v => v.Status)
.WithRequired()
.Map(v => v.MapKey("ST_DGKey"));
}
public class DogovorStatusConfiguration : EntityTypeConfiguration<DogovorStatus> {
HasKey(v => v.StatusKey); // not unique - logical error
Property(v => v.StatusKey)
.IsRequired()
.HasColumnName("ST_StatusKey");
}
我无法将 PK 添加到 DogovorStatus。指出这种类型的 EF 关系的正确方法是什么?
英孚 6.0
解决方案
也将导航属性添加到 DogovorStatus 类:
public class DogovorStatus
{
public int StatusKey { get; set; }
public virtual Dogovor Dogovor { get; set; }
}
然后调整配置:
public class DogovorStatusConfiguration : EntityTypeConfiguration<DogovorStatus>
{
HasKey(v => v.StatusKey);
}
public class DogovorConfiguration : EntityTypeConfiguration<Dogovor>
{
HasKey(v => v.Key);
Property(v => v.Key)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.HasColumnName("DG_Key");
Property(v => v.Name)
.IsRequired()
.HasColumnName("DG_Name");
HasOne(v => v.Status)
.WithOne(s => s.Dogovor)
.HasForeignKey<DogovorStatus>(s => s.StatusKey);
}
另请参阅配置一对一关系以供参考
推荐阅读
- python - 如何在 Python 中使用正则表达式(re.finditer)在字符串中的任何位置找到所有匹配项?
- powershell - 无法使用 PowerShell 将文件从文件夹上传到报表服务器文件夹
- macos - 通过 osx-terminal 更改 plist dic/string
- javascript - 在光滑的滑块中,我想对按钮选择执行过滤操作
- python - 如何使用python中的函数和循环获得投资金额每年的复利输出?
- javascript - 如何修复欢迎消息 Embed Discord Bot JS
- javascript - 如何使用 JavaScript 在 HTML 中显示数组元素
- c++ - 用 getline() 定界
- reactjs - React BrowserRouter:位置未定义
- python - 如何使用 MariaDB 制作 Tkinter GUI 应用程序,在不安装 MariaDB 的情况下在其他 PC 上工作?