teleware.foundation.data.entityframework - wengys/Teleware.Foundation GitHub Wiki
基于EF6的数据层相关接口实现,不基于任何特定数据库
本库中主要实现了Teleware.Foundation.Core.Data中相关接口
本库实现了以下接口(具体说明参见相关接口文档):
- ICRUDRepository<TEntity, TId>
- IRepositoryQuery<TEntity>
- IUnitOfWork
本接口运行时依赖以下接口的相关实现,请保证这些实现在Autofac中已注册:
-
IEFContextFactory
EF上下文工厂,负责EF实例的创建(如 Teleware.Foundation.Data.EntityFramework.Oracle 库提供了针对Oracle数据库的实现)
-
IDbObjConfiguration
EF实体配置标识,从Autofac中读取EF实体配置(EntityTypeConfiguration、ComplexTypeConfiguration)用
EF实体配置示例:
public class FooMapping : EntityTypeConfiguration<Foo>, IDbObjConfiguration { public FooMapping() { this.ToTable("T_FOO"); this.HasKey(c => c.Id); this.Property(c => c.Id).HasColumnName("ID"); this.Property(c => c.Name).HasColumnName("NAME"); } }
Autofac注册EF实体配置示例:
public class Module : Autofac.Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<FooMapping>().As<IDbObjConfiguration>(); } }
针对仓储模式特点,在删除与聚合根关联的实体时,将确保关联实体在数据库层面也被删除。具体工作原理如下:
- 删除时请确保EntityRemovedEvent事件被投递
-
EntityRemovedEventHandler
检查EntityRemovedEvent
所指向的实体,在EF中标记此实体被删除 - 在EF提交变更时,此实体将一并被删除