添加实体时的System.InvalidCastException DBSet <t> .Add()

时间:2017-11-18 17:15:22

标签: c# .net entity-framework-core dbcontext

使用更多信息进行更新

我正在使用EF Core 2.0

该实体是:

public class Vehicle
{
 public int Id { get; set; }
 public string TenantId { get; set; }
 public string Make { get; set; }
 public string Model { get; set; }
 public string Year { get; set; }
 }

我的映射配置为,

 public override void Map(EntityTypeBuilder<Vehicle> builder)
 {
      builder.ToTable("Vehicles");
      builder.HasKey(field => field.Id);
      builder.Property(field => field.Make).IsRequired().HasMaxLength(20);
      builder.Property(field => field.Model).IsRequired().HasMaxLength(20);
 }

我使用;

在DBContext中配置实体
 DataContext.Set<T>(); 

然后,如果我针对此DbSet执行任何操作,则会出现此错误。注意突出显示的部分。它们都是完全相同的。

发生了System.InvalidCastException   的HResult = 0x80004002   消息=   [A] MyProject.Models.Vehicle 无法转换为   [B]的 MyProject.Models.Vehicle 即可。 A型起源于   &#39; MyProject.Models。,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null &#39;在上下文中&#39;默认&#39;在位置   &#39;的 d:.. \ MyProject.Models.dll &#39 ;.   B型起源于   &#39; MyProject.Models,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null &#39;在上下文中&#39;默认&#39;在位置   &#39;的 d:.. \ MyProject.Models.dll &#39;

我能找到与上述相关的唯一参考是 here。在我的情况下,它似乎不是实体映射配置。

感谢任何帮助。

更新1:

我的服务类接受类型T,它定义了它将要使用的实体,例如;

public abstract class DomainService<T> : IDomainService where T : class, IEntity 
{ 
    protected DomainService(ApplicationDbContext context) 
    { 
        WorkingSet = context.Set<T>(); 
    } 
} 

现在可以为实体T正确设置自动属性WorkingSet,我可以在调试时确认它。但是使用WorkingSet执行任何操作 WorkingSet.Add(dataentity)给出了上面提到的错误。

但是,如果我在上下文类中对DbSet进行硬编码,如

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int>
{
    public DbSet<Vehicle> Vehicle { get; set; }
}

有效!如果需要,我可以继续使用此选项,但我想避免在上下文类中硬编码DbSet。

0 个答案:

没有答案