Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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# 实体框架-从查询动态设置模型属性值_C#_Entity Framework_Automapper_Code First - Fatal编程技术网

C# 实体框架-从查询动态设置模型属性值

C# 实体框架-从查询动态设置模型属性值,c#,entity-framework,automapper,code-first,C#,Entity Framework,Automapper,Code First,我有以下型号: public class A_DTO { [Key] public string Id { get; set; } **public virtual B_DTO B { get; set; }** public virtual List<B_DTO> Bs { get; set; } } public class B_DTO { [Key] public string Id { get; set; } pu

我有以下型号:

public class A_DTO
{
    [Key]
    public string Id { get; set; }

    **public virtual B_DTO B { get; set; }**

    public virtual List<B_DTO> Bs { get; set; }
}

public class B_DTO
{
    [Key]
    public string Id { get; set; }
    public string AId { get; set; }
    public string UserId {get; set; }

    [ForeignKey("AId"]
    public virtual A_DTO A { get; set; }

    [ForeignKey("UserId"]
    public virtual User User { get; set; }
}
公共A级\u DTO
{
[关键]
公共字符串Id{get;set;}
**公共虚拟B_DTO B{get;set;}**
公共虚拟列表Bs{get;set;}
}
公共B类
{
[关键]
公共字符串Id{get;set;}
公共字符串辅助{get;set;}
公共字符串用户标识{get;set;}
[外键(“援助”]
公共虚拟A_DTO A{get;set;}
[外键(“用户ID”]
公共虚拟用户用户{get;set;}
}
我正在尝试获取对象a的列表,但也包括属性B:

using AutoMapper.QueryableExtensions;
public IQueryable<A_DTO> GetAllA_DTO()
    {
        string userId = "8b6e9332-7c40-432e-ae95-0ac052904752";

        return context.A_DTO
                    .Include("Bs")
                    .Include("B")
                    .Project().To<A_DTO>()
                    .Where(a => a.Bs.Any(b => b.UserId == userId));
    }
使用AutoMapper.QueryableExtensions;
公共可查询的GetAllA_DTO()
{
字符串userId=“8b6e9332-7c40-432e-ae95-0ac052904752”;
返回context.A\u DTO
.包括(“Bs”)
。包括(B)
.Project()到()
。其中(a=>a.Bs.Any(b=>b.UserId==UserId));
}

如何根据set UserId和A_DTO.Id动态设置此属性?

以下是一组观察结果,您可能很幸运地找到了解决方案:

代码优先模型中的
B
属性将导致a_DTOs的数据库表中存在一个外键,该表包含对B_DTOs表的引用。实体框架将负责使用一个对象填充
B
导航属性,该对象填充了数据库中引用行的数据B_DTOs表,因此您将无法动态更改它

如果源类型和目标类型相同,则无需使用Automapper
Project
方法。在您的示例中,它们看起来都是
A_DTO
。是否确实不打算在上下文中包含实体“A”和从“A”映射的“A_DTO”通过Automapper?如果这是您真正想要的,那么您可以在a
中使用代码。选择
调用映射
a.Bs.FirstOrDefault(b=>b.UserId==UserId)
a\u DTO.b
。但是,您将无法在Automapper映射中基于
UserId
应用过滤

如果看不到任何Automapper地图设置代码,就很难理解这里的意图

另外,在我看来,在使用
.Include
时,最好使用接受表达式的重载。在您的情况下,Include将被重写:

。包括(a=>a.B)
.包括(a=>a.Bs)
如果重命名属性但未能更新
.Include
语句中的字符串,使用此重载可确保出现编译时错误