2016-01-25 101 views
0

我在我們的數據庫ImportError中有一個模型。我有一個課程擴展了這個模型,AssessmentImportErrorAssessmentImportError不映射到表。它有一個[NotMapped]屬性。當我嘗試選擇或插入ImportError(不是AssessmentImportError ...)我得到以下異常:擴展業務邏輯的EF實體拋出映射異常

例外:

類型的異常「System.Exception的」發生在EntityFramework.MappingAPI。 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包的Mapping API中的一個錯誤。

+0

顯示您的選擇/插入請 – solidau

+0

添加插入代碼 – Dave

+0

只是爲了得到一張圖片:如果您只*將'[NotMapped]'放在'APN'上會發生什麼? (我知道它完全不同)。 –

回答

0

該投:

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

仍然會返回AssessmentImportError那些沒有映射到數據庫模型的列表。

你應該做的也許是一個擴展方法(或服務)從AssessmentImportError映射到所需導入錯誤這樣的:

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

其中

要<導入錯誤>()===>返回新的ImportError對象

是擴展方法。

+0

在這種情況下,我從不實例化或使用'AssessmentImportError'。我只使用'ImportError' – Dave

+0

您確定參數「List 錯誤」不是AssesmentImportError列表嗎? –

+0

100%確定。我正在用一些新的信息更新這個問題。 – Dave