我有以下实体:

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; }
}


我在GasMeterPremise之间有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/

10-10 11:55