C# 如何在实体框架中配置与中间包装类的一对多关系
我使用实体框架6.1作为ORM。我想在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();
规则
和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隐藏
wrapper,同时配置一对多关系似乎是矛盾的RuleParameters
- 为什么要使用中间类?
建立没有中间阶级的关系
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或数据注释将其映射为复杂类型。