代码
我的应用程序中有两个非常简单的接口
表示保存在数据库中的实体
public interface IEntity
{
int Id { get; set; }
}
只有Nome
字段作为必填字段来保存实体的实体
public interface IEntityName : IEntity
{
string Nome { get; set; }
}
以及许多实现这个接口的类
public class Modalidade : IEntityName
{
public int Id { get; set; }
public string Nome { get; set; }
}
public class Nacionalidade : IEntityName
{
public int Id { get; set; }
public string Nome { get; set; }
}
public class Profissao : IEntityName
{
public int Id { get; set; }
public string Nome { get; set; }
}
public class TipoPessoa : IEntityName
{
public int Id { get; set; }
public string Nome { get; set; }
}
尽管它们具有相同的结构,但在此类中使用的字段却完全不同
public class Pessoa : IEntity
{
public int Id { get; set; }
public string CPF { get; set; }
public string PIS { get; set; }
public string RG { get; set; }
public string OrgaoExpedidor { get; set; }
public string TipoDocumento { get; set; }
public DateTime? DataEmissao { get; set; }
public virtual Nacionalidade Nacionalidade { get; set; }
public virtual Profissao Profissao { get; set; }
public virtual TipoPessoa Tipo { get; set; }
....
}
问题
为了方便(并且不必为每个新类创建配置类)创建了一个通用类配置:
internal class EntityNameConfiguracao<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity: class, IEntityName
{
public EntityNameConfiguracao()
{
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.Nome).IsRequired().HasMaxLength(255);
}
}
这样,我的设置会
modelBuilder.Configurations.Add(new EntityNameConfiguracao<Modalidade>());
modelBuilder.Configurations.Add(new EntityNameConfiguracao<TipoPessoa>());
modelBuilder.Configurations.Add(new EntityNameConfiguracao<Nacionalidade>());
modelBuilder.Configurations.Add(new EntityNameConfiguracao<Profissao>());
错误
但是,在尝试添加新迁移时,会出现以下错误:
命令
包管理器控制台中的命令:Add-Migration PessoaDadosAdicionais
错误
The property 'Id' is not a declared property on type 'Modalidade'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property.