【问题标题】:EF code first include foreign key onlyEF 代码首先只包含外键
【发布时间】:2023-04-05 01:07:01
【问题描述】:

我的 PolicyVIEInfo 类 TriggerInfo 类之间有一个简单的一对多关系。我想在 TriggerInfo 类中包含 PolicyVIEInfo_Id 属性,但是当我添加属性时,我得到了

列名“PolicyVIEInfo_Id1”无效。我假设它正在添加一个,因为它已经知道外键,但是我如何将它添加到我的类并正确映射它??

[DataContract]
public class PolicyVIEInfo : IdentifiableEntity
{
    [DataMember]
    public HashSet<TriggerInfo> TriggerInfos  { get; set; }
}
[DataContract]
public class TriggerInfo : IdentifiableEntity
{
    [DataMember]
    [Required]
    public long PolicyVIEInfo_Id { get; set; }
    [DataMember]
    public bool? TriggerBreached { get; set; }
}

[DataContract]
public abstract class IdentifiableEntity
{

    [DataMember]
    [Key]
    public long Id { get; set; }
}

由于循环引用问题,我不想包含整个 PolicyVIEInfo。任何帮助将不胜感激,这已经让我发疯了好几天。使用流利的 api 并没有帮助。从我读到的内容来看,我使用的是常规约定,所以我认为它会起作用。

【问题讨论】:

    标签: entity-framework ef-code-first foreign-keys code-first fluent-interface


    【解决方案1】:

    我相信三个选项都应该同样有效:

    • 要么删除下划线,因为它违反映射约定规则:

      public long PolicyVIEInfoId { get; set; }
      
    • 或者添加数据注解属性:

      [ForeignKey("PolicyVIEInfo_Id")]
      public HashSet<TriggerInfo> TriggerInfos  { get; set; }
      
    • 或者使用 Fluent API:

      modelBuilder.Entity<PolicyVIEInfo>()
          .HasMany(p => p.TriggerInfos)
          .WithRequired()
          .HasForeignKey(t => t.PolicyVIEInfo_Id);
      

    如果您映射到现有数据库,即名称为 PolicyVIEInfo_Id 的 FK 列已存在于数据库中,对于第一个选项,您必须添加从 PolicyVIEInfoId 属性名称到 PolicyVIEInfo_Id 列的映射名称,可以使用 [Column("PolicyVIEInfo_Id")] 属性,也可以通过 Fluent API 添加 .Property(t =&gt; t.PolicyVIEInfoId).HasColumnName("PolicyVIEInfo_Id")

    【讨论】:

    • 我认为映射约定规则是类名加“ID”的任意组合。这种关系已经按照惯例运作了。如果我将“PolicyVIEInfo PolicyVIEInfo”属性添加到我的 TriggerInfo 类,它会自动填充。但我只想要我不会全班。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2018-02-13
    • 2011-10-26
    • 2023-04-04
    • 1970-01-01
    • 2016-10-28
    • 2018-05-31
    相关资源
    最近更新 更多