将2个表一对多映射(使用WHERE)到实体框架中的单个实体

时间:2013-09-27 10:25:51

标签: c# asp.net .net entity-framework

希望你能帮助我。

我在db中有2个表:Page和Page_L这些表在db中配置了一对多关系,其中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

我想将这两个表映射到一个类中。

我开发了这段代码但结果并不能让我满意:

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的界面,但似乎无效。

感谢
达米亚诺

0 个答案:

没有答案