gpt4 book ai didi

c# - 如何设置内存存储库

转载 作者:太空狗 更新时间:2023-10-29 22:28:31 25 4
gpt4 key购买 nike

我有以下类(class):

public class InMemoryRepository : IRepository
{
public void Add(object entity)
{
throw new NotImplementedException();
}

public void Attach(object Entity)
{
throw new NotImplementedException();
}

public T Get<T>(object id)
{
throw new NotImplementedException();
}

public IList<T> GetAll<T>(string queryName)
{
throw new NotImplementedException();
}

public IList<T> GetAll<T>()
{
throw new NotImplementedException();
}

public IQueryable<T> Query<T>()
{
throw new NotImplementedException();
}

public void Remove(object entity)
{
throw new NotImplementedException();
}

public void Save(object entity)
{
throw new NotImplementedException();
}
}

我们的默认存储库实现使用 NHibernate 作为后备存储,但我想实现它的内存版本,这样我就可以在无需创建后备 SQL 数据库的情况下对域对象进行原型(prototype)设计。假设所有对象都有一个 Id 属性作为主键,您将如何为此实现通用内存存储?

我很难解决的一些关键点:

  • 存储库方法本身是通用的,因此我需要一些机制来自动存储和引用不同的类型。 Get<TestEntity>(object id)应该能够查询所有存储的 TestEntity 实例并找到具有匹配 Id 属性的实例,但我不能直接定义 TestEntity 对象的集合,因为存储库直到运行时才知道我正在为其提供什么类型。
  • 我需要为 Query() 方法支持 LINQ to Objects。假设我能想出一个合适的方法来存储对象,这应该像返回存储对象数组 AsQueryable() 一样简单。

您将如何存储对象以满足上述要求?

最佳答案

基础很简单:

public class InMemoryRepository : IRepository
{
private readonly IList<object> entities = new List<object>();

public T Get<T>(object id)
{
return entities.OfType<T>.SingleOrDefault(e => e.ID == id);
}

public IList<T> GetAll<T>()
{
return entities.OfType<T>.ToList();
}

public IQueryable<T> Query<T>()
{
return GetAll<T>.AsQueryable();
}
}

然而,一到public IList<T> GetAll<T>(string queryName) , 事情变得复杂了。

您可能可以求助于基于 SQLite 的存储库实现来进行测试。

关于c# - 如何设置内存存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5502019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com