0

我的 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 并没有帮助。从我读过的内容来看,我使用的是常规约定,所以我认为它会起作用。

4

1 回答 1

0

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

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

    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")]属性或.Property(t => t.PolicyVIEInfoId).HasColumnName("PolicyVIEInfo_Id")使用 Fluent添加API。

于 2013-09-18T20:25:35.873 回答