多个可空的复合外键

时间:2016-09-12 14:35:18

标签: c# data-annotations code-first

我使用的是实体框架6.1&代码第一种方法用于我的MVC项目。

   public class PackageDaySchedule
{
public int Id {get;set;}
public DateTime Time {get;set;} 
Public int PackageId {get;set;}
Public int? PackageCity{get;set;}
public int? PackageHotelId {get;set;}
Public int? PackagePlaceToVisitId {get;set;} 
//navigation property 
public virtual Package {get;set;}
 public virtual PackageCity Package City {get;st;}
public virtual PackageHotel PackageHotel {get;st;}
public virtual PackagePlaceToVisit PackagePlaceToVisit{get;set;}
}

Public class Package {
Public int PackageId {get;set;}
Public List<PackageCity> PackageCities {get;set;}
}
Public class PackageCity{
[Key, Column(Order = 0)]
Public int PackageId {get;set;}
[Key, Column(Order = 1)]
public int CityId {get;set;}
public List<PackageHotel> PackageHotels {get;set;}
//virtual properties - Package and City
}
Public class PackageHotel{
[Key, Column(Order = 0)]
Public int PackageId {get;set;}
[Key, Column(Order = 1)]
public int CityId {get;set;}
[Key, Column(Order = 2)]
Public int HotelId {get;set;}

//virtual properties - Package,City, Hotel
}

对于一个PackageDaySchedule,应该有一个packageCity或packagehotel或PackagePlaceToVist。我的问题是如何使用数据注释为PackageDayShedule表指定外键。 PackageId是PackageCity,PackageHotel&amp; amp; PackagePlaceToVist导航属性。

1 个答案:

答案 0 :(得分:1)

关于如何在asp mvc模型中表示数据库表的摘要

模型如何表示数据库表

在下一节中,我将解释如何从代码优先应用程序为数据库创建数据模型,并介绍如何在ASP MVC中表示关系。

在这个例子中,我们有三个包含以下模式的表:

学生表

StudentID,LastName,FirstName,EnrollmentDate

课程表

CourseID,Title,Credits

注册表

EnrollmentID,CourseID,StudentID,成绩

这些表中的每一个必须在单独的模型中表示。

  1. 学生表

    public partial class Student
    {
    
        public int StudentID { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public Nullable<System.DateTime> EnrollmentDate { get; set; }
    
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    

    }

  2. 公共虚拟注册是一种导航属性,用于保存与此实体相关的其他实体,例如:在我们的案例中,学生实体将保存与他相关的所有注册实体的数据。

    提示:具有1:M关系的表格&amp;它位于1面,它的模型表示应该包含M表的导航属性,它应该是一个集合

    1. 课程表 和学生一样

      第3。注册表

      public partial class Enrollment
      {
          public int EnrollmentID { get; set; }
          public Nullable<decimal> Grade { get; set; }
          public int CourseID { get; set; }
          public int StudentID { get; set; }
      
          public virtual Course Course { get; set; }
          public virtual Student Student { get; set; }
      

      }

    2. SudentID属性是外键,相应的导航属性是Student。注册实体与一个学生实体相关联,因此该属性只能容纳一个学生实体,这就是我们不使用IEnumerable的原因。 对于courseID属性也是如此。

      提示:M侧的表格应包含外键和表格。相应的Navigation属性,但不是集合。