Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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 6_Ef Fluent Api - Fatal编程技术网

C# 如何在实体框架中配置与中间包装类的一对多关系

C# 如何在实体框架中配置与中间包装类的一对多关系,c#,entity-framework-6,ef-fluent-api,C#,Entity Framework 6,Ef Fluent Api,我使用实体框架6.1作为ORM。我想在规则和code实体之间配置一对多关系。我想使用名为RuleParameters的中间包装类来实现这一点。此外,我不希望这个包装器对象在DB中表示 EF是否可以这样做?如果是这样,我缺少什么注释/fluent api配置 这是我的设置。为了简洁起见,我在这里通过fluentapi显示注释 public class Rule { public Rule() { Parameters = new RuleParameters();

我使用实体框架6.1作为ORM。我想在
规则
code
实体之间配置一对多关系。我想使用名为
RuleParameters
的中间包装类来实现这一点。此外,我不希望这个包装器对象在DB中表示

EF是否可以这样做?如果是这样,我缺少什么注释/fluent api配置

这是我的设置。为了简洁起见,我在这里通过fluentapi显示注释

public class Rule
{
    public Rule()
    {
        Parameters = new RuleParameters();
    }

    public int RuleId { get; set; }

    [NotMapped]
    public RuleParameters Parameters { get; set; }

}

public class RuleParameters
{
    public virtual IList<Code> Codes;
}

public Code
{
    public int CodeId { get; set; }

    public int RuleId { get; set; }

    [ForeignKey("RuleId")]
    public Rule Rule { get; set; }

}
我遇到的问题:

  • RuleParameters
    不是一个实体,因此我自然希望将其视为一个复杂类型,但由于
    code
    关联,因此不能这样做
  • 从EF隐藏
    RuleParameters
    wrapper,同时配置一对多关系似乎是矛盾的

    • 为什么要使用中间类? 建立没有中间阶级的关系

      public class Rule
      {
         public Rule()
         {
            Codes = new HashSet<Code>();
         }
      
         public int RuleId { get; set; }
      
         public ICollection<Code> Codes { get; set; }
      }
      
      public Code
      {
         public int CodeId { get; set; }
      
         public int RuleId { get; set; }
      
         public virtual Rule Rule { get; set; }
      }
      

      嗨,谢谢你的回复。我省略了对我的设计的讨论,以关注这个问题是否可以用EF解决。对于好奇的人来说,底层数据库结构是一个主表
      Rule
      ,包含10多个子表。我更喜欢在规则实体中有组织地对这10+个表关系进行分类,而不是将它们全部展平。例如,我希望Rule.RuleParameters有4个导航属性,另一个类型Rule.Filters包含5个导航属性。在我看来,包装提供的上下文比重命名每个属性RuleParameterCode或RuleFilterDate更多。@GertArnold
      [NotMapped]
      用于隐藏
      RuleParameters
      。这样做似乎还隐藏了我想要在实体之间配置的任何类型的关系,然而,这就产生了矛盾:(.好吧,你不能隐藏
      规则参数
      ,你必须通过fluent API或数据注释将其映射为复杂类型。