【发布时间】:2014-05-04 17:37:51
【问题描述】:
我正在使用 CodeFirst,但遇到了一个问题,我试图映射 0..1 -- n。 在模型 Media 中,我有一个 MediaCategory 类型的模型,这个模型有一个名为 MediaCategory_Id 的列,并在数据库中设置了一个 Id。但是,当我从数据库中获取数据时 MediaCategory 属性始终为空。我的问题是如何映射它,以便它通过它在数据库中获得的 Id 获取正确的数据?
我在 DbContext.cs 中尝试了一个 lil,但没有任何东西可以正常工作。 请注意,在我的存储库中,我已将 LazyLoading 设置为 true,将 Proxy 设置为 false。
上下文
public class BlogContext : DbContext
{
public BlogContext()
: base("name=DefaultConnection")
{
this.Configuration.ProxyCreationEnabled = false;
this.Database.CreateIfNotExists();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BlogContext>());
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Post>().ToTable("Post");
modelBuilder.Entity<PostMedia>().ToTable("PostMedia");
modelBuilder.Entity<Media>().ToTable("Media");
modelBuilder.Entity<MediaCategory>().ToTable("MediaCategory");
modelBuilder.Entity<Media>().HasRequired(t => t.MediaCategory);
modelBuilder.Entity<Post>().HasMany(t => t.MediaList);
}
}
模型
媒体
public class Media
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//[Required(ErrorMessage = "Title must be given.")]
[MaxLength(250, ErrorMessage = "Title can't exceeded 250 characters in length.")]
public string Title { get; set; }
[Required(ErrorMessage = "File must be given.")]
[MaxLength(Int32.MaxValue, ErrorMessage = "File exceeded max characters in length.")]
public string File { get; set; }
[MaxLength(250, ErrorMessage = "Description can't exceeded 250 characters in length.")]
public string Description { get; set; }
//[Required(ErrorMessage = "Author must be given.")]
[MaxLength(50, ErrorMessage = "Author can't exceeded 50 characters in length.")]
public string Author { get; set; }
[Required(ErrorMessage = "Created date must be given.")]
public DateTime? Created { get; set; }
public DateTime? Changed { get; set; }
public MediaCategory MediaCategory { get; set; }
}
媒体类别
public class MediaCategory
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "A title must be given.")]
[MaxLength(50, ErrorMessage = "Title can't exceeded 50 characters in length.")]
public string Title { get; set; }
[MaxLength(250, ErrorMessage = "Description can't exceeded 250 characters in length.")]
public string Description { get; set; }
}
已解决
public virtual MediaCategory MediaCategory { get; set; } and
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = true; <-- This one was on false :)
【问题讨论】:
标签: c# .net asp.net-mvc ef-code-first code-first