2

我试图使用像一个在这里找到一个通用的存储库来实现存储库模式的范围解决实体:实体框架用实体框架实现存储库模式。问题库

我创建了一个测试套件实现存储库模式(我使用NUnit)来测试存储库,但我一直有问题。下面是我得到的错误:

MyBusiness.Test.Domain.RepositoryTest.SelectCol:
System.Data.EntitySqlException: “ColCoordinate”无法解析当前范围或上下文 。使 确定所有引用变量的范围为 ,所需的模式为加载 ,并且该名称空间为 正确引用,接近转义 标识符。

我相信这是此方法来:

public ObjectQuery<E> DoQuery() 
{ 
    return _ctx.CreateQuery<E>("[" + typeof(E).Name + "]"); 
} 

我已经取得了一定要在页面的顶部添加引用:

using MyBusiness.Domain.DomainModel.EntityFramework; 

这里是我的测试设置和测试方法:

Repository<ColCoordinate, ObjectContext> _colRepository = null; 
    ObjectContext _context = null; 
    EntityContextCreator contextCreator = null; 

    [SetUp] 
    public void SetUp() 
    { 
     contextCreator = new EntityContextCreator(); 

     _context = contextCreator.Create(); 
     _colRepository = new Repository<ColCoordinate, ObjectContext>(_context); 
    } 

    [Test] 
    public void SelectCol() 
    { 
     IList<ColCoordinate> colList = _colRepository.SelectAll(); 
     Assert.True(colList.Count > 0); 
    } 

任何人都知道为什么我得到这个错误或者对如何解决它有什么建议?

如果您需要更多信息,请询问我将更新问题。

谢谢
马特

+0

的“实施库模式实体框架”的链接似乎缺少。 – CraftyFella 2009-09-15 22:16:33

回答

3

那么你的代码标识:

public ObjectQuery<E> DoQuery(){  
     return _ctx.CreateQuery<E>("[" + typeof(E).Name + "]"); 
} 

很怀疑,在类型名称是不是需要什么,你需要的EntitySet的名称,有时他们是同样的事情,但通常他们不是,特别是如果您手动更新模型以获得更多可读属性。

例如,如果您有:

ctx.Customers它返回一个类型,称为客户,typeName为客户的EntitySet的名称是客户。

Tip 13在我的series of tips有一些代码,告诉你如何从类型获取EntitySet名称。

希望这有助于

亚历