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

时间:2016-01-25 17:49:17

标签: c# .net entity-framework

我的数据库ImportError中有一个模型。我有一个类扩展了这个模型,AssessmentImportErrorAssessmentImportError未映射到表格。它上面有[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中的一个错误。

1 个答案:

答案 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对象

是扩展方法。