每个实体类都可以对应一个或多个实体配置类。配置类用于配置实体的元数据。
示例
internal class BookConfig : EntityConfig<Book>
{
protected override void ConfigMeta()
{
Meta.MapTable().MapAllProperties();
Meta.Property(Book.ContentProperty).MapColumn().HasLength("MAX");
Meta.Property(Book.BytesProperty).MapColumn().HasDbType(System.Data.DbType.Binary);
}
}
上面代码示例了为 Book 实体类声明的实体配置类型。其中对 Meta 属性(实体元数据)进行了配置。配置了实体、实体属性与数据库映射的相关内容。当然,除了 ORM 配置信息外,实体还会有更多相应的配置,详见:EntityConfig.Meta 属性。
实体的多级别配置
一个实体可以在不同的插件中进行分别配置。
例如,有 A、B、C 三个插件,其中 B 引用 A、C 引用 B;这三个插件中,都可以为 Book 类声明实体配置,如 BookConfigA、BookConfigB、BookConfigC。这时,框架会根据插件的启动顺序,来调用这些实体配置类的 ConfigMeta 方法,调用顺序如下:BookConfigA -> BookConfigB -> BookConfigC。调用完成后,实体的元数据的最终值即被固定了下来。
也就是说,最底层进行的配置,可以被更上层的配置类进行修改。这非常利于实体和配置的重用。这是 产品线工程 和 插件化架构 中插件级别的复用的技术基础。在实际应用场景上,越底层的实体配置应该越通用,越面向产品;越上层的配置,则越接近于某个项目。