2
代碼
我在我的應用程序兩個非常簡單的接口如何創建和使用泛型類EntityTypeConfiguration <TEntity>
表示將保存在數據庫實體
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; }
....
}
用於例如問題
完全不同的領域Ord呃,以促進(而不必創建一個配置類爲每個新類)創建了一個通用類配置:
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.
謝謝,它的工作! – ridermansb