实例 属性 没有为类型 'System.Int64' 定义
Instance Property is not defined for type 'System.Int64'
我正在使用存储库模式来访问使用 Entity Framework 的数据。我已经使用洋葱架构正确地实现了一切(我认为),但是当我 运行 测试时我得到错误:
Instance Property 'IDDocument' is not defined for type 'System.Int64'
(大致翻译自法语)
我测试的方法如下:
public T Get(long id)
{
ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext;
ObjectSet<T> set = objContext.CreateObjectSet<T>();
IEnumerable<string> keyNames = set.EntitySet.ElementType
.KeyMembers
.Select(k => k.Name);
if (keyNames.Count() > 1)
return null;//Que faire quand il y a plusieurs clés?
else
{
string idName = keyNames.ElementAt(0); // For Document would be IDDocument
var parameter = Expression.Parameter(id.GetType());
var property = Expression.Property(parameter, idName);
var idValue = Expression.Constant(id, id.GetType());
var equal = Expression.Equal(property, idValue);
var predicate = Expression.Lambda<Func<T, bool>>(equal, parameter);
return entities.SingleOrDefault(predicate);
}
}
由于我不会解释的原因,我的表具有不同的 ID 名称,但这就是我使用表达式生成器添加参数然后使用谓词检索结果的原因。你可以在这个post中看到这个方法:
IDDocument 在我的 EF 实体的 POCO 中以下列方式声明:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long IDDocument { get; set; }
当我在测试中调用它时:
[TestMethod]
public void IdExistsGetTest()
{
long valueToCheck = 1L;
repo = new Repository<Web_Documents>(context);
var test = repo.Get(valueToCheck);
test.Should().BeOfType(typeof(Web_Documents));
}
context
定义我的 dbcontext(之前实例化)。
现在,当我 运行 测试时,我总是得到上述的 ArgumentException,知道我遗漏了什么吗?我认为问题在于 Get(long id) 方法,因为如果我在没有 Expression
的情况下更改代码,它工作正常(但不是我想要的那样!)。谢谢
我认为:
var parameter = Expression.Parameter(id.GetType());
应该是:
var parameter = Expression.Parameter(typeof(T));
我正在使用存储库模式来访问使用 Entity Framework 的数据。我已经使用洋葱架构正确地实现了一切(我认为),但是当我 运行 测试时我得到错误:
Instance Property 'IDDocument' is not defined for type 'System.Int64'
(大致翻译自法语)
我测试的方法如下:
public T Get(long id)
{
ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext;
ObjectSet<T> set = objContext.CreateObjectSet<T>();
IEnumerable<string> keyNames = set.EntitySet.ElementType
.KeyMembers
.Select(k => k.Name);
if (keyNames.Count() > 1)
return null;//Que faire quand il y a plusieurs clés?
else
{
string idName = keyNames.ElementAt(0); // For Document would be IDDocument
var parameter = Expression.Parameter(id.GetType());
var property = Expression.Property(parameter, idName);
var idValue = Expression.Constant(id, id.GetType());
var equal = Expression.Equal(property, idValue);
var predicate = Expression.Lambda<Func<T, bool>>(equal, parameter);
return entities.SingleOrDefault(predicate);
}
}
由于我不会解释的原因,我的表具有不同的 ID 名称,但这就是我使用表达式生成器添加参数然后使用谓词检索结果的原因。你可以在这个post中看到这个方法:
IDDocument 在我的 EF 实体的 POCO 中以下列方式声明:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long IDDocument { get; set; }
当我在测试中调用它时:
[TestMethod]
public void IdExistsGetTest()
{
long valueToCheck = 1L;
repo = new Repository<Web_Documents>(context);
var test = repo.Get(valueToCheck);
test.Should().BeOfType(typeof(Web_Documents));
}
context
定义我的 dbcontext(之前实例化)。
现在,当我 运行 测试时,我总是得到上述的 ArgumentException,知道我遗漏了什么吗?我认为问题在于 Get(long id) 方法,因为如果我在没有 Expression
的情况下更改代码,它工作正常(但不是我想要的那样!)。谢谢
我认为:
var parameter = Expression.Parameter(id.GetType());
应该是:
var parameter = Expression.Parameter(typeof(T));