Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为业务逻辑扩展EF实体会引发映射异常_C#_.net_Entity Framework - Fatal编程技术网

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

C# 为业务逻辑扩展EF实体会引发映射异常,c#,.net,entity-framework,C#,.net,Entity Framework,我的数据库中有一个模型。我有一个扩展这个模型的类,assessmentimportorror评估导入错误未映射到表。它有一个[NotMapped]属性。当我尝试选择或插入一个importorror(不是assessmentimportorror…)时,我得到以下异常: 例外情况: EntityFramework.MappingAPI.dll中发生类型为“System.exception”的异常,但未在用户代码中处理 其他信息:在上下文“DAL.HTTrans.Model.HTTransDB”中找

我的数据库中有一个模型。我有一个扩展这个模型的类,
assessmentimportorror
<代码>评估导入错误未映射到表。它有一个
[NotMapped]
属性。当我尝试选择或插入一个
importorror
(不是
assessmentimportorror
…)时,我得到以下异常:

例外情况:

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();
        }
    }
private static void SaveErrors(列表错误,int-batchID)
{
//从输入错误到输入恐怖。他们已经是输入恐怖了。
列出castedErrors=errors.Select(e=>(ImportError)e.ToList();
使用(var db=new HTTransDB())
{
foreach(铸造错误中的变量e)
{
e、 BatchId=BatchId;
}
db.壁嵌件(铸造错误);
错误。清除();
}
}
编辑:

如果我将
db.BulkInsert(castedErrors)
更改为
db.ImportErrors.AddRange(castedErrors)
我不再有问题。这似乎是BulkInsert Nuget包的映射API中的一个错误。

此强制转换:

errors.Select(e => (ImportError)e)
仍将返回未映射到DB模型的评估导入错误的列表

您应该做的可能是一种扩展方法(或服务),它可以从评估导入错误映射到所需的导入错误,如下所示:

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

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


是扩展方法。

显示您的选择/插入请仅获取图片:如果仅将
[NotMapped]
置于
APN
上会发生什么?(我知道这完全不同)。在这种情况下,我从不实例化或使用
评估导入错误。我只使用了
ImportError
您确定参数“列表错误”不是资产列表导入错误吗?100%确定。我正在用一些新信息更新这个问题。我假设你真的需要使用EF BulkInsert库,对吗?是的,我们很可能会有大量错误。不过我有个变通办法。我有assessmentimportorror,但没有扩展importorror,并且在需要使用它时有一个绑定函数。BulkInsert软件包没有注意到它。