我有以下模型:
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定义了一个由 ( InstanceId,DatabaseName和SchemaName)组成的复合 PK。
但是在创建迁移时出现以下错误:
表达式“c => c.Database.Instance”不是有效的属性表达式。该表达式应表示一个简单的属性访问:'t => t.MyProperty'。参数名称:propertyAccessExpression
有任何想法吗?有可能吗?有没有办法“手动”指定它,即不使用属性链而只是将表和列指定为纯文本?
哆啦的时光机
相关分类