我正试图使用一个泛型类传入一个数据对象,然后使用其中的值来完成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((,使用声明的状态数据对具有实体框架的DB执行CRUD操作。
问题是,当我试图访问泛型类(OrderState(中State对象(State(的属性值时,我会得到错误
System.Reflection.TargetException:'非静态方法需要目标。">
链接到我试图模仿的奥尔良信息。Microsoft Orleans Grain Persistence
我可能认为这是错误的,或者只是完全错误,所以任何帮助都将不胜感激。
我假设这是一个简单的大小写不匹配的情况(双关语并非有意(。
在行中:
var test = typeof(TGrainState).GetProperty("id").GetValue(null);
您正在查找属性id
。然而,您的类是这样声明的:
public int Id { get; set; }
GetProperty方法的返回值是"如果找到,则表示具有指定名称的公共属性的对象;否则为null。"在null实例上调用GetValue将导致您看到的异常。