0

PolicyVIEInfo クラスと TriggerInfo クラスの間に単純な 1 対多の関係があります。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

私は、すべてが等しくうまく機能するはずの3つのオプションがあると信じています。

  • マッピング規則に違反しているため、アンダースコアを削除します。

    public long PolicyVIEInfoId { get; set; }
    
  • または、データ注釈属性を追加します。

    [ForeignKey("PolicyVIEInfo_Id")]
    public HashSet<TriggerInfo> TriggerInfos  { get; set; }
    
  • または流暢な API を使用します。

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

既存のデータベースにマップする場合、つまりデータベースに名前が既に存在する FK 列の場合、最初のオプションでは、属性を使用するか、Fluentを使用して追加することにより、プロパティ名から列名へPolicyVIEInfo_Idのマッピングを追加する必要があります。API。PolicyVIEInfoIdPolicyVIEInfo_Id[Column("PolicyVIEInfo_Id")].Property(t => t.PolicyVIEInfoId).HasColumnName("PolicyVIEInfo_Id")

于 2013-09-18T20:25:35.873 に答える