EF代码首先只包含外键

时间:2013-09-18 17:09:42

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

我的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没有帮助。根据我的阅读,我使用常规约定,所以我认为它会起作用。

1 个答案:

答案 0 :(得分: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")]属性,也可以使用Fluent API添加.Property(t => t.PolicyVIEInfoId).HasColumnName("PolicyVIEInfo_Id")