我正在尝试为我的实体框架存储库创建一个非常通用的泛型存储库,该存储库具有基本的 CRUD 语句并使用接口。我先撞到了砖墙头,然后被撞倒了。这是我的代码,在控制台应用程序中编写,使用实体框架模型,带有一个名为 Hurl 的表。只是试图通过其 ID 拉回对象。这是完整的应用程序代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using System.Linq.Expressions;
using System.Reflection;
using System.Data.Objects.DataClasses;
namespace GenericsPlay
{
class Program
{
static void Main(string[] args)
{
var hs = new HurlRepository(new hurladminEntity());
var hurl = hs.Load<Hurl>(h => h.Id == 1);
Console.Write(hurl.ShortUrl);
Console.ReadLine();
}
}
public interface IHurlRepository
{
T Load<T>(Expression<Func<T, bool>> expression);
}
public class HurlRepository : IHurlRepository, IDisposable
{
private ObjectContext _objectContext;
public HurlRepository(ObjectContext objectContext)
{
_objectContext = objectContext;
}
public ObjectContext ObjectContext
{
get
{
return _objectContext;
}
}
private Type GetBaseType(Type type)
{
Type baseType = type.BaseType;
if (baseType != null && baseType != typeof(EntityObject))
{
return GetBaseType(type.BaseType);
}
return type;
}
private bool HasBaseType(Type type, out Type baseType)
{
Type originalType = type.GetType();
baseType = GetBaseType(type);
return baseType != originalType;
}
public IQueryable<T> GetQuery<T>()
{
Type baseType;
if (HasBaseType(typeof(T), out baseType))
{
return this.ObjectContext.CreateQuery<T>("[" + baseType.Name.ToString() + "]").OfType<T>();
}
else
{
return this.ObjectContext.CreateQuery<T>("[" + typeof(T).Name.ToString() + "]");
}
}
public T Load<T>(Expression<Func<T, bool>> whereCondition)
{
return this.GetQuery<T>().Where(whereCondition).First();
}
public void Dispose()
{
if (_objectContext != null)
{
_objectContext.Dispose();
}
}
}
}
这是我得到的错误:
System.Data.EntitySqlException was unhandled
Message="'Hurl' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly., near escaped identifier, line 3, column 1."
Source="System.Data.Entity"
Column=1
ErrorContext="escaped identifier"
ErrorDescription="'Hurl' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly."
这是我试图从中提取此信息的地方。
http://blog.keithpatton.com/2008/05/29/Polymorphic+Repository+For+ADONet+Entity+Framework.aspx