1

あなたが私を助けてくれることを願っています。

データベースに 2 つのテーブルがあります: Page と Page_L これらのテーブルは、データベース内で 1 対多の関係で構成されています。Pag​​e はメイン テーブルで、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 のインターフェースを使ってみたのですがうまくいかないようです。

ありがとう
ダミアーノ

4

0 に答える 0