使用更多信息进行更新
我正在使用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。