2014-03-19 2 views
0

나는 웹 사이트에서 작업하고 있으며 데이터베이스를 만들기 위해 먼저 코드를 사용하고 있습니다. 내 비디오 클래스 : 당신은 내가 2 곳을 볼 수 있도록ASP.NET 웹 양식의 테이블 간의 관계

[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; } 

: VidUser은 (ASP.NET 신원에서 ASP.NET 신원 ApplicationUser 클래스를 사용) 내 사용자 클래스입니다 CourseVidUser thees 속성은 내 수업입니다 . 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; } 

내 질문에, 당신은 모든 사용자 (VidUser)를 알 방법 thees 테이블 사이의 관계에있다는 과정의 교사가 될 수 있고, 할 수있는 모든 과정은 한 교사가 그리고 상단에 쓴 다른 클래스들에 대해서도 마찬가지입니다. 그래서 난 비디오 정보를 얻을 필요가 어디에서 어떤하지만 난 null 참조 오류가있어 :

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

Entity Framework (EF)는 해당 개체를 참조하는 개체 자체가로드 될 때 반드시 모든 관련 개체를로드하지 않습니다. ContextOptions.LazyLoadingEnabled 속성은 테이블에서 읽어들이 자마자이 클래스의 인스턴스에 즉시로드하여로드 할 것인지 여부에 따라 ContextOptions.LazyLoadingEnabled 속성을 설정할 수 있습니다 (이 경우 이름은 db입니다). 그 (것)들이 항법 방법을 통해 접근 할 때까지 기다리십시오.

사용자 또는 코스와 같은 개체를 명시 적으로로드하려면 '로드'메서드를 호출하면됩니다. 이 MSDN 항목은이에 대한 몇 가지 유용한 정보를 제공합니다

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

날이 도움이 있는지 여부를 알려 주시기 바랍니다. 행운을 빕니다. James Hurst