【发布时间】:2017-02-06 22:48:22
【问题描述】:
我有一个像这样的通用存储库:
public interface IGenericRepository<TObject> where TObject : class
{
TObject Add(TObject t);
}
public class GenericRepository<TObject> : IGenericRepository<TObject> where TObject : class
{
private readonly DbContext context;
public GenericRepository(DbContext context)
{
this.context = context;
}
public virtual TObject Add(TObject t)
{
context.Set<TObject>().Add(t);
context.SaveChanges();
return t;
}
}
在我的 EF 模型中,我有 Author 和 Book,它们具有 1:N 的关系。作者有一个导航属性“书”到书,书有“作者”到作者。
然后我有一个像这样的通用服务:
public class GenericService<TObject> : IGenericService<TObject> where TObject : class
{
private readonly IGenericRepository<TObject> context;
public GenericService(IGenericRepository<TObject> ct)
{
context = ct;
}
public TObject Add(TObject data)
{
return context.Add(data);
}
}
我有一个这样的单元测试:
[TestMethod]
public void TestAdd()
{
var b = new Book();
b.AuthorId = 1;
b.Name = "Test";
b.ISBN = "1111";
var service = new GenericService(new GenericRepository<Book>(new MyDbEntities()));
var newBook = service.Add(b);
Assert.AreEqual("Author1", newBook.Author.Name);
}
问题是 newBook.Author 为 null,这意味着从 Add 方法新创建的对象没有任何相关实体。我知道此类问题的解决方案之一是使用 .include() 来包含所有相关实体,但就我而言,这是一个通用存储库,我不知道如何做到这一点。
任何帮助将不胜感激。
【问题讨论】:
标签: c# entity-framework entity-framework-6