我正在尝试使用泛型类传入数据对象,然后使用其中的值来完成CRUD操作。
class OrderState<TGrainState> : Grain, IState where TGrainState : class
{
protected TGrainState State { get; set; }
public Task Get()
{
using (var context = new SDbContext())
{
//Passing Null instance because not sure how to access the instance of the state object
var test = typeof(TGrainState).GetProperty("id").GetValue(null);
//int t = (int)test;
//var obj = context.orders.Where(x => x.Id == t);
//return Task.FromResult(obj);
}
return Task.CompletedTask;
}
}
TGrainState是我想要传递的通用对象。
public class State
{
public int Id { get; set; }
public DateTime Created { get; set; }
public string AssignedOrganization { get; set; }
public bool isComplete { get; set; }
public string assignedUser { get; set; }
}
这是我试图传递给泛型类的状态类。
class OrderGrain : OrderState<State>, IOrder
{
public override Task OnActivateAsync()
{
//Should fill the State Object from the Db
Get();
//Sets the information contained in the State to the Object
this.orderInfo = new OrderInfo
{
Id = State.Id,
Created = State.Created,
AssignedOrganization = State.AssignedOrganization,
isComplete = State.isComplete,
assignedUser = State.assignedUser
};
return base.OnActivateAsync();
}
}
从包含所有CRUD操作的State Generic类继承的类。
所以我或多或少试图完成的工作就是Microsoft Orleans如何进行状态设置,在该状态创建状态对象,对其进行操作,然后调用Write(),Update(),Delete()或Get() )使用声明的状态数据在带有实体框架的数据库上执行CRUD操作。
问题是,当我尝试访问通用类(OrderState)内的State对象(State)的属性的值时,出现错误
System.Reflection.TargetException:'非静态方法需要一个 目标。
链接到我试图模仿的奥尔良信息。 Microsoft Orleans Grain Persistence
我可能会考虑这个错误或完全错误,因此任何帮助将不胜感激。
答案 0 :(得分:0)
我将假定这是一个大小写不匹配的简单情况(双关语不是故意的)。
在这一行:
<tr ng-repeat = "favourites in items.Likes">
<td>{{ favourites }}</td>
<td ng-if="$index <= items.Dislikes.length-1">{{items.Dislikes[$index]}}</td>
</tr>
您正在寻找属性var test = typeof(TGrainState).GetProperty("id").GetValue(null);
。但是,您的班级是这样声明的:
id
GetProperty方法的返回值是“一个对象,该对象表示具有指定名称的公共属性;如果找到,则为否则为空”。在空实例上调用GetValue将导致您看到的异常。