0

У меня есть отношение от одного к другому между классом класса PolicyVIEInfo класса TriggerInfo. Я хотел бы включить атрибут PolicyVIEInfo_Id в класс TriggerInfo, но когда я добавлю свойство, я получаюКод EF сначала включает только внешний ключ

Недопустимое имя столбца '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

Я считаю, что есть три варианта, которые все должны работать одинаково хорошо:

  • Либо удалить подчеркивание, потому что это против правил отображения конвенции:

    public long PolicyVIEInfoId { get; set; } 
    
  • или добавить аннотацию данных атрибут:

    [ForeignKey("PolicyVIEInfo_Id")] 
    public HashSet<TriggerInfo> TriggerInfos { get; set; } 
    
  • Или используйте Fluent AP I:

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

Если сопоставить существующую базу данных, то есть столбец FK с именем PolicyVIEInfo_Id уже существует в базе данных, для первого варианта, вы должны добавить отображение из названия PolicyVIEInfoId собственности на имя столбца PolicyVIEInfo_Id, либо используя атрибут [Column("PolicyVIEInfo_Id")], либо добавив .Property(t => t.PolicyVIEInfoId).HasColumnName("PolicyVIEInfo_Id") с Fluent API.

+0

Я думал, что правила условного обозначения календаря были любой комбинацией имени класса плюс «ID». Отношения уже работают по соглашению. Если я добавлю атрибут PolicyVIEInfo PolicyVIEInfo в свой класс TriggerInfo, он будет заполнен автоматически. Но я просто хочу, чтобы я не весь класс. – quigley

Смежные вопросы