[英]MVC3 EF4.1 Code-First Lazy Loading
我有这种情况:
MVC3应用程序,带有EF4.1 Code-First和SQLCE。
实体:
对于每个内容项,将有由GUID链接的N个翻译。 因此,Content类没有对Translation进行任何引用,但每个翻译都有一个Content属性。
Content类具有NotMapped Translation,只是为了将单个模型发送到视图。
当我填充数据库时,我可以使用GUID作为参数成功填充两个表。
但是如何从视图中加载翻译呢? 我是懒惰加载,导航属性等新东西。
恢复,我可以正确填充,但没有弄清楚如何在单个视图中加载两者。 如何基于“locale”参数加载翻译。
谁可以帮我这个事?
谢谢。
更新:代码
内容类
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);
}
你不能这样做。 如果您想延迟加载,则必须在内容上公开翻译。 如果您希望在内容上只有一个非映射翻译,则必须先手动加载它(单独查询),然后才能将内容传递给视图:
Content content = LoadContent();
content.Translation = context.Translations
.Single(t => t.Content.GUID == contentId && t.Name == locale);
首先,我认为您的内容实体应该有一个ICollection of Translation来正确表示翻译和内容之间的1:N关系。 第二,如果你想在一个查询中检索正确的翻译和内容,请从翻译开始,如下所示:
var translation = context.Translations.Include("Content").Single(t => t.Content.GUID == contentId && t.Name == locale);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.