C# LINQ,使用Include函数
我正在Visual Studio 2013中使用EF 6。我想代表子表中的外键从父表中获取匹配记录。 我有以下代码行C# LINQ,使用Include函数,c#,entity-framework,linq,linq-to-sql,linq-to-entities,C#,Entity Framework,Linq,Linq To Sql,Linq To Entities,我正在Visual Studio 2013中使用EF 6。我想代表子表中的外键从父表中获取匹配记录。 我有以下代码行 var record = db.ChannelFees.Include(x =>x.SubSource).ToList(); 这里ChannelFees是子表,其中SubSourceId是来自的外键 子资源(父表) 频道费用等级如下所示: using System; using System.Collections.Generic; public
var record = db.ChannelFees.Include(x =>x.SubSource).ToList();
这里ChannelFees是子表,其中SubSourceId是来自的外键
子资源(父表)
频道费用等级如下所示:
using System;
using System.Collections.Generic;
public partial class ChannelFee
{
public virtual SubSource SubSource { get; set; }
public int SubSource_id { get; set; }
public double Fee { get; set; }
public int Id { get; set; }
}
以及子资源类
using System;
using System.Collections.Generic;
public partial class SubSource
{
public int Id { get; set; }
public string Description { get; set; }
public string MapName { get; set; }
}
但我得到了以下例外
指定的包含路径无效。EntityType“FinancialManager.ChannelFee”未声明名为“SubSource”的导航属性
有什么问题吗?我想应该是:
public virtual ICollection<SubSource> SubSource;
公共虚拟ICollection子资源;
我认为应该是:
public virtual ICollection<SubSource> SubSource;
公共虚拟ICollection子资源;
您可以尝试以下方法:
public partial class ChannelFee
{
public virtual ICollection<SubSource> SubSource { get; set; } // Just to enable lazy load
public int Id { get; set; }
public string Description { get; set; }
public string MapName { get; set; }
}
public partial class SubSource
{
public int Id { get; set; }
public string Description { get; set; }
public string MapName { get; set; }
public virtual ChannelFee ChannelFee {get; set; } // Navigation property
}
公共部分类频道费
{
公共虚拟ICollection子资源{get;set;}//仅用于启用延迟加载
公共int Id{get;set;}
公共字符串说明{get;set;}
公共字符串MapName{get;set;}
}
公共部分类子源
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共字符串MapName{get;set;}
公共虚拟ChannelFee ChannelFee{get;set;}//导航属性
}
通常我还会在上下文中添加一个映射(您可以通过配置属性获得相同的结果)
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(t=>t.ChannelFee)
.具有多个(t=>t.子源);
}
您可以尝试以下方法:
public partial class ChannelFee
{
public virtual ICollection<SubSource> SubSource { get; set; } // Just to enable lazy load
public int Id { get; set; }
public string Description { get; set; }
public string MapName { get; set; }
}
public partial class SubSource
{
public int Id { get; set; }
public string Description { get; set; }
public string MapName { get; set; }
public virtual ChannelFee ChannelFee {get; set; } // Navigation property
}
公共部分类频道费
{
公共虚拟ICollection子资源{get;set;}//仅用于启用延迟加载
公共int Id{get;set;}
公共字符串说明{get;set;}
公共字符串MapName{get;set;}
}
公共部分类子源
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共字符串MapName{get;set;}
公共虚拟ChannelFee ChannelFee{get;set;}//导航属性
}
通常我还会在上下文中添加一个映射(您可以通过配置属性获得相同的结果)
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(t=>t.ChannelFee)
.具有多个(t=>t.子源);
}
解决此问题的最简单方法是声明名为“SubSource”的导航属性。通过注释
public partial class ChannelFee
{
[ForeignKey("SubSource_id")]
public virtual SubSource SubSource { get; set; }
public int SubSource_id { get; set; }
}
解决此问题的最简单方法是声明名为“SubSource”的导航属性。通过注释
public partial class ChannelFee
{
[ForeignKey("SubSource_id")]
public virtual SubSource SubSource { get; set; }
public int SubSource_id { get; set; }
}
我已经自己解决了这个问题。实际上,EF并没有代表我在SQL中创建的外键约束在模型中生成导航属性,这就是错误发生的原因。
因此,我只是删除了模型并再次添加它。问题已经解决。我已经自己解决了这个问题。实际上,EF并没有代表我在SQL中创建的外键约束在模型中生成导航属性,这就是错误发生的原因。
因此,我只是删除了模型并再次添加它。问题已解决。是的,林克:我也编辑了问题。请发送ChannelFee和SubSource课程好吗?如果您使用的是fluent接口映射,也可以使用映射配置。我已经用ChannelFee和SubSource classes@bubiI更新了这个问题,因为我对Entity Framework是新手,所以我实际上不知道还需要做些什么才能得到这个问题。您的问题表明您确实有两个名为
SubSource
的分部类!那是打字错误吗?是的,林克,我也编辑了这个问题。你能发送ChannelFee和SubSource课程吗?如果您使用的是fluent接口映射,也可以使用映射配置。我已经用ChannelFee和SubSource classes@bubiI更新了这个问题,因为我对Entity Framework是新手,所以我实际上不知道还需要做些什么才能得到这个问题。您的问题表明您确实有两个名为SubSource
的分部类!是打字错误吗?“修饰符“virtual”对此项无效”“放置virtual关键字时发生以下错误”“修饰符“virtual”对此项无效”“放置virtual关键字时发生以下错误”“将最后一个方法(OnModelCreating())放置在何处”“将最后一个方法(OnModelCreating())放置在何处?”?