我的数据库ImportError
中有一个模型。我有一个类扩展了这个模型,AssessmentImportError
。 AssessmentImportError
未映射到表格。它上面有[NotMapped]
属性。当我尝试选择或插入ImportError
(而不是AssessmentImportError
...)时,我会遇到以下异常:
例外:
EntityFramework.MappingAPI.dll中出现'System.Exception'类型的异常,但未在用户代码中处理
其他信息:在上下文'DAL.HTTrans.Model.HTTransDB'中找不到类型'DAL.SharedModels.AssessmentImportError'
模特:
[NotMapped]
public class AssessmentImportError : ImportError
{
public string APN { get; set; }
}
public partial class ImportError : Frameworks.Interfaces.IImportError
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ErrorId { get; set; }
[Required]
[MaxLength(200)]
[Index("IX_TableName_RecordId", 1)]
public string TableName { get; set; }
// ... deleted code
}
批量插入:
private static void SaveErrors(List<IImportError> errors, int batchID)
{
// Casting from IImportError to ImportError. They are already an ImportError though.
List<ImportError> castedErrors = errors.Select(e => (ImportError)e).ToList();
using (var db = new HTTransDB())
{
foreach (var e in castedErrors)
{
e.BatchId = batchID;
}
db.BulkInsert(castedErrors);
errors.Clear();
}
}
编辑:
如果我将db.BulkInsert(castedErrors)
更改为db.ImportErrors.AddRange(castedErors)
我不再有问题。这似乎是BulkInsert Nuget包的Mapping API中的一个错误。
答案 0 :(得分:0)
这个演员:
errors.Select(e => (ImportError)e)
仍将返回未映射到数据库模型的 AssessmentImportError 列表。
你应该做的是一种扩展方法(或服务),它从 AssessmentImportError 映射到所需的 ImportError ,如下所示:
List<ImportError> castedErrors = errors.Select(e => e.To<ImportError>()).ToList();
其中
到&lt; ImportError&gt;()===&gt;返回新的ImportError对象
是扩展方法。