gpt4 book ai didi

c# - Entity Framework 通用存储库错误

转载 作者:可可西里 更新时间:2023-11-01 08:27:15 25 4
gpt4 key购买 nike

我正在尝试为我的 Entity Framework 存储库创建一个非常通用的泛型存储库,它具有基本的 CRUD 语句并使用接口(interface)。我先撞到了砖墙头,然后被撞倒了。这是我的代码,使用 Entity Framework 模型在控制台应用程序中编写,带有一个名为 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

最佳答案

好吧,这个让我很困惑。我采取了大胆的尝试(在 Stephen Walther 即将出版的 ASP.NET MVC Unleashed 书中看到了一部分 EFRepository 之后)并且它开始工作,这里是修复(替换此方法,注意字符串格式的差异)。关于为什么这样的任何建议?在我看来,这可能是一个错误(或者可能是我正在做的事情)。无论如何对于任何感兴趣的人。 (我想修复这部分将修复 EFRepository @ Keith Patton's blog post 的整个功能)。

public IQueryable<T> GetQuery<T>()
{
Type baseType;
if (HasBaseType(typeof(T), out baseType))
{
return this.ObjectContext.CreateQuery<T>(String.Format("[{0}]", baseType.Name.ToString())).OfType<T>();
}
else
{
return this.ObjectContext.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString()));
}
}

关于c# - Entity Framework 通用存储库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695878/

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