teleware.foundation.data.entityframework - wengys/Teleware.Foundation GitHub Wiki

Teleware.Foundation.Data.EntityFramework

基于EF6的数据层相关接口实现,不基于任何特定数据库

概述

本库中主要实现了Teleware.Foundation.Core.Data中相关接口

实现的接口

本库实现了以下接口(具体说明参见相关接口文档):

  1. ICRUDRepository<TEntity, TId>
  2. IRepositoryQuery<TEntity>
  3. IUnitOfWork

依赖

本接口运行时依赖以下接口的相关实现,请保证这些实现在Autofac中已注册:

  1. IEFContextFactory

    EF上下文工厂,负责EF实例的创建(如 Teleware.Foundation.Data.EntityFramework.Oracle 库提供了针对Oracle数据库的实现)

  2. 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>();
       }
    }

扩展

针对仓储模式特点,在删除与聚合根关联的实体时,将确保关联实体在数据库层面也被删除。具体工作原理如下:

  1. 删除时请确保EntityRemovedEvent事件被投递
  2. EntityRemovedEventHandler检查EntityRemovedEvent所指向的实体,在EF中标记此实体被删除
  3. 在EF提交变更时,此实体将一并被删除
⚠️ **GitHub.com Fallback** ⚠️