【问题标题】:Entity Framework 6. Get include property throws error does not declare a navigation property [duplicate]实体框架6.获取包含属性抛出错误未声明导航属性[重复]
【发布时间】:2017-03-16 08:48:29
【问题描述】:

Entity Framework 6. Get include property throws error does not declare a navigation property 我必须实体:

class Product
{
        public virtual int? vatrateID { get; set; }
        public virtual VatRate VatRate { get; set; }
}
class RowDocumentSale
{
        public virtual int? vatrateID { get; set; }
        public virtual VatRate VatRate { get; set; }
}

在上下文中我这样做:

public DbSet<Product> Products { get; set; }
public DbSet<RowDocumentSale> rowDocSale { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<RowDocumentSale>().HasOptional(o => o.VatRate).WithMany().HasForeignKey(k => k.vatrateID);
        modelBuilder.Entity<RowDocumentSale>().Map(m =>
        {
            m.MapInheritedProperties();
            m.ToTable("RowDocumentSales");
        })
            .HasKey(k => k.id).Property(k => k.id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

    modelBuilder.Entity<Product>().HasOptional(o => o.VatRate).WithMany().HasForeignKey(k => k.vatrateID);
        modelBuilder.Entity<Product>()
            .HasKey(k => k.productID)
                            .Map(m =>
                            {
                                m.MapInheritedProperties();
                                m.ToTable("products");
                            })
            .Property(k => k.productID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

在数据库中的结果是:

table RowDocumentSales
  "vatrateID" integer,
    CONSTRAINT "FK_dbo.RowDocumentSales_dbo.VatRates_vatrateID" FOREIGN KEY ("vatrateID")
      REFERENCES dbo."VatRates" (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,

table Product
  "vatrateID" integer,
    CONSTRAINT "FK_dbo.products_dbo.VatRates_vatrateID" FOREIGN KEY ("vatrateID")
      REFERENCES dbo."VatRates" (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

如果我跑:

            using (var context = new DataModelsDbContext())
        {
            list = context.rowDocSale.Include(p => p.VatRate).Take(10).ToList();
        }
        Assert.AreEqual(1, list[0].VatRate.id);

工作正常

但如果我跑:

    List<Product> list;
    using (var context = new DataModelsDbContext())
    {
        list = context.Products.Include(p => p.VatRate).Take(10).ToList();
    }
    Assert.AreEqual(1, list[0].VatRate.id);

我收到一个错误

Additional information: A specified Include path is not valid. The EntityType 'WebApplication1.Models.DataModels.Product' does not declare a navigation property with the name 'VatRate'.

我不明白可能出了什么问题...

【问题讨论】:

  • 能否添加产品数据库集的注册码(即public DbSet&lt;Product&gt; Products { get; set; })?在有效的代码 sn-p 中,您访问的是 context.rowDocSale... 而不是 context.RowDocSale。会不会是 DataModelsDbContext 上的 DbSet 属性被声明为 rowDocSaleproducts?如果是,请尝试访问context.products
  • 已编辑。我可以访问产品。但是,如果我将 Include(p => p.VatRate) 与产品一起使用,则会出现错误。如果我将 Include(p => p.VatRate) 与 RowDocumentSale 一起使用,一切正常
  • 好的,谢谢。我在配置中看不到任何问题...我会尽快再看看你的问题。
  • 更改实体的属性名称,然后尝试我不确定,但这可能是问题public virtual VatRate VatRates { get; set; }
  • 您的 Product 和 RowDocumentSale 类中是否定义了主键?类似于:[Key] public int Id { get;放; }

标签: postgresql entity-framework c#-4.0 navigation-properties


【解决方案1】:

已解决: 我不知道为什么,但这有帮助: 它是:

public class Product : BaseModel, IExportable
{
    public virtual VatRate VatRate { get; set; }
}

现在是:

public class Product : BaseModel, IExportable
{
    public virtual VatRate VatRate_ { get; set; }
}

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多