あなたが私を助けてくれることを願っています。
データベースに 2 つのテーブルがあります: Page と Page_L これらのテーブルは、データベース内で 1 対多の関係で構成されています。Page はメイン テーブルで、Page_L は従属テーブルです。
テーブルページの構造は次のとおりです。
Int IdPage (PK)
Int Order Not Null
テーブル Page_L の構造は次のとおりです。
Int IdPage_L (PK)
Int IdPage Not Null
Int IdLanguage Not Null
Varchar(255) Title
Varchar(MAX) Description
これら 2 つのテーブルを 1 つのクラスにマップしたいと思います。
私はこのコードを開発しましたが、結果は私を満足させません:
public class MyDbContext : DbContext
{
public MyDbContext()
: base("ConnectionString")
{
}
public IDbSet<Page> Pages
{
get { return Set<Page>(); }
}
public IDbSet<Page_L> Page_Ls
{
get { return Set<Page_L>(); }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class Page
{
[Key]
public IdPage Id { get; set; }
public int Order { get; set; }
public ICollection<Page_L> Page_Ls { get; private set; }
}
public class Page_L
{
[Key]
public IdPage_L Id { get; set; }
public int IdPage { get; set; }
public int IdLanguage { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
int LanguageID = (int)System.Configuration.ConfigurationSettings.AppSettings["LanguageID"];
MyDbContext context = new MyDbContext();
var page = context.Pages.First();
var page_L = page.Page_Ls.Where(p=>p.IdLanguage==LanguageID).FirstOrDefault();
if(page_L!=null)
Response.Write(page_L.Title);
}
Page_Load メソッドでは、 のFirst()
結果を検索する最初のページを取得します.Where(p=>p.IdLanguage==LanguageID)
。
これをバイパスして、AppSettings の LanguageID でフィルタリングされた Page と Page_L をマージするので、次のことができます。
protected void Page_Load(object sender, EventArgs e)
{
MyDbContext context = new MyDbContext();
var page = context.Pages.First();
Response.Write(page.Title);
}
Page_L などの Page のインターフェースを使ってみたのですがうまくいかないようです。
ありがとう
ダミアーノ