ef多条件映射_ef 多个模块,通过程序集映射entity,指定对应的repository

在Entity Framework repository下加两个方法:

public virtual T GetByEntityName(object id, string EntityTypeName)

{

dynamic repository = GetEFRepository(EntityTypeName);

if (repository != null)

return repository.Entities.Find(id);

else

return null;

}

public virtual dynamic GetRecordRepository(string EntityTypeName)

{

dynamic repository = GetEFRepository(EntityTypeName);

if (repository != null)

{

var type = repository.GetType().GetGenericArguments()[0];

dynamic part = Activator.CreateInstance(type);

return part;

}

else

{

return null;

}

}

private object GetEFRepository(string EntityTypeName)

{

if (_repositoryDictionary == null)

{

var typesToRegister = TypeUtil.GetEntityTypes();

_repositoryDictionary = new Dictionary();

foreach (var type in typesToRegister)

{

object repository = Activator.CreateInstance(typeof(EfRepository<>).MakeGenericType(type), _context);

_repositoryDictionary[type.Name] = repository;

}

}

if (_repositoryDictionary.ContainsKey(EntityTypeName))

return _repositoryDictionary[EntityTypeName];

else

return null;

}

TypeUtil.cs

public classTypeUtil

{public static IListGetEntityTypes()

{var cacheManager = newMemoryCacheManager();return cacheManager.Get("ENTITY-TYPE-ASSEMBLY", () =>{var typesToRegister =Assembly.GetExecutingAssembly().GetTypes()

.Where(type=> (typeof(BaseEntity).IsAssignableFrom(type) && (type.GetConstructor(Type.EmptyTypes) != null)));returntypesToRegister.ToList();

});

}

}

test:

[Test]public voidTypeUtilTest()

{var n = _repository.GetRecordRepository("NewsEntity");

dynamic nm= _repository.GetByEntityName(1, "NewsEntity");var title =nm.Title;var c = _repository.GetRecordRepository("NewsCommentEntity");

dynamic cm= _repository.GetByEntityName(1, "NewsCommentEntity");var comment =cm.Comment;string pass = title + "\n" +comment;

Assert.Pass(pass);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值