我有以下模型:internal class SchemaEfEntity{ [Required] [MaxLength(128)] public string Name { get; set; } [Required] public DatabaseEfEntity Database { get; set; }}internal class DatabaseEfEntity{ [Required] public string Name { get; set; } [Required] public InstanceEfEntity Instance { get; set; } public ICollection<SchemaEfEntity> Schemas { get; set; }}internal class InstanceEfEntity : IEfIdEntity{ public long Id { get; set; } [Required] public string Name { get; set; } public ICollection<DatabaseEfEntity> Databases { get; set; }}public sealed class MyDbContext : DbContext{ internal DbSet<InstanceEfEntity> Instances { get; set; } internal DbSet<DatabaseEfEntity> Databases { get; set; } internal DbSet<SchemaEfEntity> Schemas { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<InstanceEfEntity>().HasKey(x => x.Id); modelBuilder.Entity<InstanceEfEntity>().HasIndex(x => x.Name).IsUnique(); modelBuilder.Entity<DatabaseEfEntity>().HasKey( $"{nameof(DatabaseEfEntity.Instance)}{nameof(InstanceEfEntity.Id)}", $"{nameof(DatabaseEfEntity.Name)}"); modelBuilder.Entity<SchemaEfEntity>().HasKey( $"{nameof(SchemaEfEntity.Database)}{nameof(DatabaseEfEntity.Instance)}{nameof(InstanceEfEntity.Id)}", $"{nameof(SchemaEfEntity.Database)}{nameof(DatabaseEfEntity.Name)}", $"{nameof(SchemaEfEntity.Name)}"); }}SchemaEfEntity定義了一個(gè)由 ( InstanceId,DatabaseName和SchemaName)組成的復(fù)合 PK。但是在創(chuàng)建遷移時(shí)出現(xiàn)以下錯(cuò)誤:表達(dá)式“c => c.Database.Instance”不是有效的屬性表達(dá)式。該表達(dá)式應(yīng)表示一個(gè)簡(jiǎn)單的屬性訪問:'t => t.MyProperty'。參數(shù)名稱:propertyAccessExpression有任何想法嗎?有可能嗎?有沒有辦法“手動(dòng)”指定它,即不使用屬性鏈而只是將表和列指定為純文本?
1 回答

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以使用以下語(yǔ)法完成:
modelBuilder.Entity<SchemaEfEntity>()
.HasOne(typeof(InstanceEfEntity))
.WithMany()
.HasForeignKey(
$"{nameof(SchemaEfEntity.Database)}{nameof(DatabaseEfEntity.Instance)}{nameof(InstanceEfEntity.Id)}")
.OnDelete(DeleteBehavior.Restrict);
- 1 回答
- 0 關(guān)注
- 72 瀏覽
添加回答
舉報(bào)
0/150
提交
取消