ASP.NetWebフォームアプリでコードファーストでEF5を使用しており、「Compleate」というマスターコンテキストを作成しました。これに対してLINQ呼び出しを行うと、すべてが正常に機能します。私が実行しているサーバーには多くのリソースがないため、DBにクエリを実行する必要があるたびに呼び出されるデータの範囲を制限するために、使用する小さなコンテキストを作成しました。問題は、小さいコンテキストに対してLINQ呼び出しを行うと、常にエラーが発生することです。
値をnullにすることはできません。パラメータ名:外部
私はこれを数日間修正しようとしていて、迷子になっています。私の小さな文脈で私が間違っていることについての助けは素晴らしいでしょう。
Compleate.cs(コードファーストマイグレーションを実行および実行するコンテキスト):
using FFInfo.DAL.Tables;
using System.Data.Entity;
namespace FFInfo.DAL
{
public class Compleate : DbContext
{
public Compleate() : base("FFInfoDB") { }
//General Tables
public DbSet<File> Files { get; set; }
public DbSet<Culture> Cultures { get; set; }
public DbSet<Section> Sections { get; set; }
public DbSet<Navigation> Navigation { get; set; }
//Locale Tables
public DbSet<Locale_Section> Locale_Sections { get; set; }
}
}
Base.cs(すべての小さいコンテキストはこれから継承します):
using System.Data.Entity;
namespace FFInfo.DAL
{
public class Base<TContext> : DbContext where TContext : DbContext
{
static Base()
{
Database.SetInitializer<TContext>(null);
}
protected Base() : base("FFInfoDB") { }
}
}
SiteNavigation.cs(私が読み込もうとしている小さなコンテキスト):
using FFInfo.DAL.Tables;
using System.Data.Entity;
namespace FFInfo.DAL
{
public class SiteNavigation : Base<SiteNavigation>
{
public DbSet<Navigation> Navigation { get; private set; }
public DbSet<Section> Sections { get; private set; }
public DbSet<Locale_Section> SectionTranslations { get; private set; }
}
}
LINQ CODE:
protected void Page_Load(object sender, EventArgs e)
{
rpBooks.DataSource = PopulateNav("Book", 1);
rpBooks.DataBind();
}
protected object PopulateNav(string Category, byte Culture)
{
using (var db = new SiteNavigation())
{
return (from n in db.Navigation
join st in db.SectionTranslations on n.SectionID equals st.Section.SectionID
where n.Category == Category && st.CultureID == Culture
select new
{
LinkAddress = st.Section.Type + "/" + st.Section.RouteName,
st.Title
}).ToList();
}
}