EF几张表存在关系时报的一个错误

Models如下:

    public class Student
    {
        public DateTime EnrollmentDate { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }

        public string FirstMidName { get; set; }

        public string LastName { get; set; }

        public int StudentID { get; set; }
    }

 

 

    public class Course
    {
        public int CourseID { get; set; }

        public int Credits { get; set; }

        public virtual Enrollment Enrollments { get; set; }

        public string Title { get; set; }
    }

 

 

    public class Enrollment
    {
        public int CourseID { get; set; }

        public virtual Course Course { get; set; }

        public int EnrollmentID { get; set; }

        public decimal? Grade { get; set; }

        public virtual Student Student { get; set; }

        public int StudentID { get; set; }
    }

 

DbContext如下:

    public class SchoolDbContext : DbContext
    {
        public readonly static string connectionStr = ConfigurationManager.ConnectionStrings["MySchool"].ConnectionString.Trim();

        public SchoolDbContext()
            : base(connectionStr)
        { }

        public DbSet<Student> Students { get; set; }

        public DbSet<Enrollment> Enrollments { get; set; }

        public DbSet<Course> Courses { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Conventions.Remove<IncludeMetadataConvention>();


            //base.OnModelCreating(modelBuilder);
        }
    }

在页面呈现学生的信息,Controllers如下:

    public class SchoolController : Controller
    {
        //
        // GET: /School/

        SchoolDbContext db = new SchoolDbContext();
        public ActionResult Index()
        {
            var s = from t in db.Students
                    select t;
            return View(s.ToList());
        }

    }

运行的时候,一直在var s = from t in db.Students select t 报错,错误信息如下:

Unable to determine the principal end of an association between the types 'MyMVCStudy.Models.Course' and 'MyMVCStudy.Models.Enrollment'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

后来在网上搜到一个解决方案,还是因为Model之前的关系没有处理好,改SchoolDbContext类如下:

    public class SchoolDbContext : DbContext
    {
        public readonly static string connectionStr = ConfigurationManager.ConnectionStrings["MySchool"].ConnectionString.Trim();

        public SchoolDbContext()
            : base(connectionStr)
        { }

        public DbSet<Student> Students { get; set; }

        public DbSet<Enrollment> Enrollments { get; set; }

        public DbSet<Course> Courses { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
            modelBuilder.Entity<Student>().HasRequired(p => p.Enrollments).WithOptional();
            modelBuilder.Entity<Course>().HasRequired(p => p.Enrollments).WithOptional();
            modelBuilder.Entity<Enrollment>().HasRequired(p => p.Student).WithOptional();
            modelBuilder.Entity<Enrollment>().HasRequired(p => p.Course).WithOptional();

            //base.OnModelCreating(modelBuilder);
        }
    }

问题解决!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值