如何在复合外键中使用 NotMapped 属性
本文关键字:NotMapped 属性 复合 | 更新日期: 2023-09-27 18:33:56
我正在从数据库EF项目创建一个代码优先。从中生成的数据库无论如何我都无法更改。我已经手动创建了表之间的大部分关系,但是我遇到了表的墙。
有两个表
T1: FK3
T2: PK1 PK2 PK3
T1:FK1 FK2 之间的关系是硬编码逻辑。因为表是 T1,所以 FK1 = "Foo" 和 FK2 = "BAR"
我已创建
T1
[NotMapped]
FK1 {get {return "FOO"}}
[NotMapped]
FK2 {get {return "BAR"}}
用流畅的 api 映射了这个
modelBuilder.Entity<T1>
.HasRequired<T2>
.WithMany()
.HasForeignKey(f => new {f.FK1, f.FK2, f.FK3 })
我收到错误:
The foreign key component 'FK1' is not a
declared property on type 'T1'. Verify that it has not been
explicitly excluded from the model and that it is a valid primitive property.
如何创建此关系?我试过 DataAnnotations fluentapi 似乎无法处理它。
不能
将[NotMapped]
属性用作键。未映射意味着排除 - "这是不会映射到数据库的 C# 代码"。
但是,您可以使用[DatabaseGenerated(DatabaseGenerationOption.Computed)]
并计算数据库上的值:自定义序列字符串作为sql身份列
PS.:声明外键的无 hazzle 方法是[ForeignKey]
,只需使用int
来保存 id。