2011-08-29 78 views
0

我有这种情况:MVC3 EF4.1代码优先延迟加载

MVC3应用程序,与EF4.1 Code-First和SQLCE。

实体:

  • 内容;
  • 翻译;

对于每个内容项,会出现Ñ翻译由GUID相连。所以内容类没有任何参考翻译,但每个翻译都有一个内容属性。

Content类有一个NotMapped Translation,只是将一个模型发送到视图。

当我填充数据库时,我可以使用GUID作为参数成功填充两个表。

但我怎样才能从视图加载翻译?我新来这个东西像懒惰加载,导航属性等

恢复,我可以正确填充,但没有弄清楚如何加载在一个单一的视图。如何根据“locale”参数加载翻译。

任何人都可以帮助我吗?

谢谢。

UPDATE:CODE

内容类

public class Content 
{ 
    #region [ Properties ] 
    /// <summary> 
    /// The GUID 
    /// </summary> 
    [Key] 
    public string GUID { get; set; } 

    public string Type { get; set; } 


    [NotMapped] 
    public Translation Translation { get; set; } 
    #endregion 
} 

翻译类

public class Translation 
{ 
    [Key] 
    public int ID { get; set; } 

    public Content Content { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 
} 

人口代码

for (int i = start; i < (start + 2); i++) 
     { 
      Content c = new Content(1234); 
      c.Type = Type.ToString(); 

      using (ContentContext db = new ContentContext()) 
      { 
       if (!db.Contents.Any(o => o.GUID == c.GUID)) 
       { 
        c.PopulateInfo(Locale); 
        db.Contents.Add(c); 

        c.RegionalInfo.Name = "test"; 
        db.Translations.Add(c.Translation); 

        db.SaveChanges(); 
       } 
       else 
       { 
        c = db.Contents.Single(o => o.GUID == c.GUID); 
       } 
      } 

    // local list to load on the controller 
      Contents.Add(c); 
     } 
+0

你可以给我们一些代码(你的加载和您的数据的传递)。这样推理更容易。我希望在将内容传递给视图之前加载内容,但这可能取决于您的代码 – Carsten

回答

1

你不能这样做。如果你想延迟加载,你必须在你的内容上公开翻译。如果你想对内容只有一个非映射翻译必须加载手动(单独的查询),你将内容传递给视图前:

Content content = LoadContent(); 
content.Translation = context.Translations 
           .Single(t => t.Content.GUID == contentId && t.Name == locale); 
1

首先,我认为你的内容实体,应该有翻译的ICollection的正确表示Translation和Content之间的1:N关系。 其次,如果你想在翻译检索一个查询开始正确的翻译和内容,像这样:

var translation = context.Translations.Include("Content").Single(t => t.Content.GUID == contentId && t.Name == locale);