У меня есть следующие объекты:Как мне получить навигационные свойства?
public abstract class Meter
{
public int MeterId { get; set; }
public string EANNumber { get; set; }
public string MeterNumber { get; set; }
[Required]
public virtual Premise Premise { get; set; }
public abstract void AddReading(CounterReading reading);
}
public class GasMeter : Meter
{
public virtual Counter Counter { get; private set; }
public override void AddReading(CounterReading reading)
{
Counter.Readings.Add(reading);
}
}
public class Premise
{
[Key]
public int PremiseId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
[Required]
public virtual Address Address { get; set; }
public string Type { get; set; }
public virtual GasMeter GasMeter { get; set; }
}
У меня есть 1: 1 соотношение между GasMeter
и Premise
.
Что я должен сделать, чтобы установить myPremise.GasMeter = myMeter
и получить myPremise
в более позднем коде с myMeter.Premise
?
Редактировать При его настройке с помощью Fluent API следующим образом:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Premise>().HasOptional(p => p.GasMeter)
.WithRequired(m => m.Premise);
}
Я получаю следующее исключение при запуске:
исключение типа «System.Data.Entity .ModelConfiguration.ModelValidationException 'произошел в EntityFramework.dll, но не был обработан в коде пользователя
Дополнительная информация : во время создания модели были обнаружены одна или несколько ошибок проверки:
Помещение: FromRole: NavigationProperty «Помещения» недействительна. Тип «GasMeter» FromRole «Premise_GasMeter_Target» в AssociationType «Premise_GasMeter» должен точно соответствовать типу «Meter», на котором объявлен этот NavigationProperty.
Означает ли это, что я не могу использовать Свойства навигации с наследованием? Как бы мне решить мою проблему?
См. Следующее: http://stackoverflow.com/a/27727545/861716 –
@GertArnold См. Мое обновление. –
Либо «публичное виртуальное помещение Premise {get; задавать; } 'должен находиться в' GasMeter', или 'public virtual GasMeter GasMeter' должен быть' public virtual Meter Meter'. –