为业务逻辑扩展 EF 实体会引发映射异常
本文关键字:体会 映射 异常 实体 EF 业务 扩展 | 更新日期: 2023-09-27 18:31:45
我的数据库ImportError
中有一个模型。我有一个扩展这个模型的类,AssessmentImportError
. AssessmentImportError
不会映射到表。它上面有一个[NotMapped]
属性。当我尝试选择或插入ImportError
(不是AssessmentImportError
...我得到以下异常:
例外:
EntityFramework.MappingAPI 中发生了类型为"System.Exception"的异常.dll但未在用户代码中处理
其他信息:键入"DAL"。SharedModels.AssessmentImportError"在上下文"DAL.HTTrans.Model.HTTransDB'
模型:
[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 包的映射 API 中的一个错误。
这个演员表:
errors.Select(e => (ImportError)e)
仍将返回未映射到数据库模型的评估导入错误列表。
你应该做的可能是一个扩展方法(或服务),它从AssessmentImportError映射到所需的ImportError,如下所示:
List<ImportError> castedErrors = errors.Select(e => e.To<ImportError>()).ToList();
哪里
To() ===> 返回新的 ImportError 对象
是扩展方法。