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