为业务逻辑扩展 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 中的一个错误。

为业务逻辑扩展 EF 实体会引发映射异常

这个演员表:

errors.Select(e => (ImportError)e)

仍将返回未映射到数据库模型的评估导入错误列表。

你应该做的可能是一个扩展方法(或服务),它从AssessmentImportError映射到所需的ImportError,如下所示:

List<ImportError> castedErrors = errors.Select(e => e.To<ImportError>()).ToList();

哪里

To

() ===> 返回新的 ImportError 对象

是扩展方法。