我有以下实体:
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; }
}
我在
GasMeter
和Premise
之间有1:1的关系。我必须怎么做才能设置
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);
}
运行时出现以下异常:
EntityFramework.dll中发生类型为'System.Data.Entity.ModelConfiguration.ModelValidationException'的异常,但未在用户代码中处理
附加信息:在模型生成期间检测到一个或多个验证错误:
前提:FromRole:NavigationProperty'前提'无效。关联类型'Premise_GasMeter'中FromRole'Premise_GasMeter_Target'的类型'GasMeter'必须与声明了该NavigationProperty的类型'Meter'完全匹配。
这是否意味着我不能将导航属性与继承一起使用?
那我该如何解决我的问题呢?
最佳答案
我认为您需要为每个类别添加PK / FK关系的ID
public abstract class Meter
{
....
public int PremiseId
public virtual Premise Premise { get; set; }
}
和
public class Premise
{
....
public int GasMeterId
public virtual GasMeter GasMeter{ get; set; }
}
关于c# - 如何使导航属性正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28126362/