2014-03-19 78 views
0

我正在一個網站上工作,並且我首先使用代碼來創建數據庫。 我的視頻類:ASP.NET Web表格中表格之間的關係

[ScaffoldColumn(false)] 
    public int VideoId { get; set; } 

    [Required,DisplayName("Session Title")] 
    public string Title { get; set; } 

    [Required, DisplayName("Description")] 
    public string Description { get; set; } 

    [Required, DisplayName("Video")] 
    public string Address { get; set; } 

    [ScaffoldColumn(false),DisplayName("Sent Date")] 
    public DateTime SentDate { get; set; } 

    [Required, DisplayName("Keywords")] 
    public string Keywords { get; set; } 

    [ScaffoldColumn(false), DisplayName("sLug")] 
    public string Slug { get; set; } 

    [ScaffoldColumn(false), DisplayName("Status")] 
    public bool Status { get; set; } 

    [Required,DisplayName("Image")] 
    public string Picture { get; set; } 

    //[Required,DisplayName("Rate")] 
    //public int Rate { get; set; } 

    [ScaffoldColumn(false)] 
    public Course Course { get; set; } 
    public VidUser User { get; set; } 

所以你可以看到我有2個屬性:CourseVidUser thees屬性是我的班VidUser是我的用戶類(使用ASP.NET身份ApplicationUser類ASP.NET身份) 。 VidUser:

public string FullName { get; set; } 
    public string Email { get; set; } 
    public string Avatar { get; set; } 
    public string Website { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<Video> Videos { get; set; } 

和課程類:

[ScaffoldColumn(false)] 
    public int CourseId { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 

    public DateTime StartDate { get; set; } 

    public DateTime EndDate { get; set; } 

    public int SessionCount { get; set; } 

    public VidUser Teacher { get; set; } 
    public virtual ICollection<Video> Videos { get; set; } 

我的問題是如何thees表之間的關係,你知道每一個用戶(VidUser)可以是課程教師,可以每場有一個老師對於我在頂部寫的其他課程而言也是如此。 所以有些地方我需要得到視頻的細節,但我得到空引用錯誤:

var db = new MyContext(); 
db.Videos.Where(v => v.Course.CourseId == 2).FirstOrDefault(); //This line returns null 

或用於獲取用戶名:

var db = new MyContext(); 
db.Videos.Where(v => v.User.UserName == "Admin").FirstOrDefault(); //This line returns null 

和我的種子的方法是:

#region Roles 
     var roleManager = new RoleManager<VidRole>(new RoleStore<VidRole>(context)); 
     if (!roleManager.RoleExists("Admin")) 
     { 
      roleManager.Create(new VidRole("Admin","مدیر کل")); 
     } 
     if (!roleManager.RoleExists("Manager")) 
     { 
      roleManager.Create(new VidRole("Manager", "مدیر سایت")); 
     } 
     if (!roleManager.RoleExists("Writer")) 
     { 
      roleManager.Create(new VidRole("Writer", "نویسنده")); 
     } 
     if (!roleManager.RoleExists("RegisteredUser")) 
     { 
      roleManager.Create(new VidRole("RegisteredUser","کاربر عضو")); 
     } 
     if (!roleManager.RoleExists("VIP")) 
     { 
      roleManager.Create(new VidRole("VIP","کاربر ویژه")); 
     } 
     if (!roleManager.RoleExists("BannedUSers")) 
     { 
      roleManager.Create(new VidRole("BannedUSers","کاربر محروم")); 
     } 
     #endregion 

     #region Users 
     var usermanager = new UserManager<VidUser>(new UserStore<VidUser>(context)); 
     var user = new VidUser() 
     { 
      UserName = "Admin", 
      Avatar = "/UserFiles/Admin/brands_01.jpg", 
      Email = "[email protected]", 
      FullName = "K. Sadin", 
      Website = "http://Sadin.ir", 
      Description = "..." 
     }; 
     var user1 = new VidUser() 
     { 
      UserName = "User", 
      Avatar = "/UserFiles/Admin/brands_02.jpg", 
      Email = "[email protected]", 
      FullName = "K. Sadin", 
      Website = "http://Sadin.ir", 
      Description = "..." 
     }; 
     var user2 = new VidUser() 
     { 
      UserName = "Manager", 
      Avatar = "/UserFiles/Admin/brands_03.jpg", 
      Email = "[email protected]", 
      FullName = "K. Sadin", 
      Website = "http://Sadin.ir", 
      Description = "..." 
     }; 
     var userCreationResult = usermanager.Create(user, "kamisevenline"); 
     var userCreationResult2 = usermanager.Create(user1, "kamisevenline"); 
     var userCreationResult3 = usermanager.Create(user2, "kamisevenline"); 
     #endregion 

     #region Add User To Role 
     if (userCreationResult.Succeeded) 
     { 
      usermanager.AddToRole(user.Id, "Admin"); 
      usermanager.AddToRole(user.Id, "Manager"); 
      usermanager.AddToRole(user.Id, "Writer"); 
      usermanager.AddToRole(user.Id, "RegisteredUser"); 
      usermanager.AddToRole(user.Id, "VIP"); 
      usermanager.AddToRole(user1.Id, "Admin"); 
      usermanager.AddToRole(user2.Id, "Writer"); 
     } 
     #endregion 

     //Test Data: 
     #region Testing Data, Should Remove in the future 

     var course1 = new Course() 
     { 
      Title = "آموزش ام وی سی", 
      Description = "در این دوره از ابتدا یک سیستم را با MVC طراحی میکنیم و در طی چلسات با نکات آشنا میشویم.", 
      StartDate = DateTime.Now, 
      EndDate = DateTime.Now.AddYears(1), 
      Teacher = user, 
      SessionCount = 10 
     }; 
     var course2 = new Course() 
     { 
      Title = "آموزش ASP.NET 5.5", 
      Description = "در این دوره آموزش بنیادین ASP.NET 4.5 را شروع میکنیم و تا آخر دوره پروژه ای آماده خواهیم کرد.", 
      StartDate = DateTime.Now, 
      EndDate = DateTime.Now.AddMonths(1), 
      Teacher = user, 
      SessionCount = 10, 
     }; 
     context.SaveChanges(); 
     context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course1 
     }); context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course2 
     }); context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course1 
     }); context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course2 
     }); context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course1 
     }); context.Videos.AddOrUpdate(new Video() 
     { 
      Address = "/Videos/Admin/MVC/Vid01.mp4", 
      Description = "در جلسه اول با این قسما ها آشنا می شویم. مدیریت،کاربران، و دیگر بخش ها", 
      Keywords = "کلیدواژه,MVC,آموزش MVC", 
      Picture = "/images/dummy/products/product-6.jpg", 
      SentDate = DateTime.Now, 
      Slug = "جلسه-اول-آموزش-mvc", 
      Status = true, 
      Title = "جلسه اول آموزش MVC", 
      User = user, 
      Course = course2 
     }); 
     context.SaveChanges(); 
     #endregion 

請讓我知道我在這段代碼中犯了什麼錯誤。謝謝你們。

回答

0

當引用它們的對象本身被加載時,實體框架(EF)不一定會加載所有相關的對象。你可以根據你是否總是希望這些表被讀取並立即從它的表中讀取並加載到這個類的實例中來設置Context(在你的情況下你有命名數據庫)ContextOptions.LazyLoadingEnabled屬性,或者等到他們自己通過導航方法訪問。

要顯式加載對象,如用戶或課程,您可以調用他們的'加載'方法。此MSDN條目提供一些有用的信息,爲這個:

http://msdn.microsoft.com/en-us/library/vstudio/bb896249(v=vs.100).aspx

請讓我知道這是否有所幫助。祝你好運。 James Hurst