System.Reflection.TargetException:Object与目标类型不匹配。
public class Parameter : BaseEntity
{
...
...
public override void Map(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parameter>(opt =>
{
opt.ToTable("Parameter");
opt.HasKey(x => x.Id);
opt.Property(x => x.AutoId).UseSqlServerIdentityColumn();
opt.HasAlternateKey(x => x.AutoId);
});
}
}
public class DataContext<T> : DbContext where T : BaseEntity
{
...
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
Type t = typeof(T);
t.GetMethod("Map").Invoke(this, new object[] { modelBuilder }); // this line *****
}
}
T被称为参数类。并且(//这行*****)方面给了我错误。
System.Reflection.TargetException:Object与目标类型不匹配。
我该怎么办?
答案 0 :(得分:1)
如果您创建Minimal, Complete, and Verifiable example,类似以下内容(甚至参数类型无关紧要),您的问题会立即变得明显:
class ArgumentType
{
}
class Foo
{
public void Bar(ArgumentType argument)
{
}
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(Foo);
var argument = new ArgumentType();
t.GetMethod("Bar").Invoke(this, new object[] { argument });
}
}
您在this
上调用该方法,不一个Foo
(或您的T
),所以你得到了那个例外。
要修复代码,您需要实例化T
并在其上调用方法:
var instance = new Foo(); // or new T() in your case
t.GetMethod("Bar").Invoke(instance, new object[] { argument });
您还必须将T
限制为new()
才能使其工作,以指示为T
传递的类型参数必须具有无参数构造函数,因此您可以在那里实例化它。