【发布时间】:2020-07-11 06:53:59
【问题描述】:
我有一个实体框架项目,它有这样的模型和配置。
public class Context : DbContext
{
public DbSet<Field> Fields { get; set; }
public DbSet<Table> Tables { get; set; }
public DbSet<Column> Columns { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new FieldConfiguration());
modelBuilder.Configurations.Add(new TableConfiguration());
modelBuilder.Configurations.Add(new ColumnConfiguration());
}
}
public class Field
{
public Guid Guid { get; set; }
public Guid CompanyGuid { get; set; }
}
public class Column : Field
{
public Guid TableGuid { get; set; }
public Table Table { get; set; }
}
public class Table : Field
{
public List<Column> Columns { get; set; }
}
public class FieldConfiguration : EntityTypeConfiguration<Field>
{
public FieldConfiguration()
{
Map(t =>
{
t.ToTable("Field");
});
HasKey(p => new { p.Guid, p.CompanyGuid });
Property(p => p.Guid).HasColumnName("Guid").IsRequired();
Property(p => p.CompanyGuid).HasColumnName("CompanyGuid").IsRequired();
}
}
public class ColumnConfiguration : EntityTypeConfiguration<Column>
{
public ColumnConfiguration()
{
Map(t =>
{
t.ToTable("Column");
});
HasKey(p => new { p.Guid, p.CompanyGuid });
Property(p => p.Guid).HasColumnName("Guid").IsRequired();
Property(p => p.CompanyGuid).HasColumnName("CompanyGuid").IsRequired();
}
}
public class TableConfiguration : EntityTypeConfiguration<Table>
{
public TableConfiguration()
{
Map(t =>
{
t.ToTable("Table");
});
HasKey(p => new { p.Guid, p.CompanyGuid });
Property(p => p.Guid).HasColumnName("Guid").IsRequired();
Property(p => p.CompanyGuid).HasColumnName("CompanyGuid").IsRequired();
HasMany(t => t.Columns).WithRequired(t => t.Table).HasForeignKey(t => new { t.TableGuid, t.CompanyGuid }).WillCascadeOnDelete(true);
}
}
然后我尝试创建一个迁移,我得到这样的错误
外键组件“CompanyGuid”不是“列”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。
怎么了?我该如何解决?
【问题讨论】:
标签: c# .net entity-framework