如何在复合外键中使用 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 属性

不能

[NotMapped]属性用作键。未映射意味着排除 - "这是不会映射到数据库的 C# 代码"。

但是,您可以使用[DatabaseGenerated(DatabaseGenerationOption.Computed)]并计算数据库上的值:自定义序列字符串作为sql身份列

PS.:声明外键的无 hazzle 方法是[ForeignKey],只需使用int来保存 id。