Asp.net mvc 4 加入实体框架5

Asp.net mvc 4 加入实体框架5,asp.net-mvc-4,entity-framework-5,Asp.net Mvc 4,Entity Framework 5,我的模型中有两个类 [Table("tblPackages")] public class Packages { public int Id { get; set; } [Required] [Display(Name = "Package Type")] public int TypeId { get; set; } [Display(Name = "No of SMS")] public int AllowedSMS { get; set;

我的模型中有两个类

[Table("tblPackages")]
public class Packages
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Package Type")]
    public int TypeId { get; set; }

    [Display(Name = "No of SMS")]
    public int AllowedSMS { get; set; }

    [Display(Name = "Time Span in Days")]
    public int? TimeSpan { get; set; }

    public decimal Price { get; set; }
}


[Table("tblPackageTypes")]
public class PackageTypes
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Details { get; set; }
    public DateTime DueDate { get; set; }
}

桌子是一样的。现在我需要从class
Packages
中获取所有内容,只需从class-packagestypes中获取
Name
。仅使用实体框架如何使用导航属性,您需要在包和PackageTypes之间建立FK关系:

[Table("tblPackages")]
public class Packages
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Package Type")]
    public int TypeId { get; set; }

    [Display(Name = "No of SMS")]
    public int AllowedSMS { get; set; }

    [Display(Name = "Time Span in Days")]
    public int? TimeSpan { get; set; }

    public decimal Price { get; set; }

    public int PackageTypesId {get;set;}

    public virtual PackageTypes {get;set;}
}


[Table("tblPackageTypes")]
public class PackageTypes
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Details { get; set; }
    public DateTime DueDate { get; set; }
    public ICollection<Packages> {get;set;}
}
[表(“tblPackages”)]
公共类包
{
公共int Id{get;set;}
[必需]
[显示(名称=“包装类型”)]
公共int类型ID{get;set;}
[显示(姓名=“短信号码”)]
public int AllowedSMS{get;set;}
[显示(Name=“以天为单位的时间跨度”)]
公共int?TimeSpan{get;set;}
公共十进制价格{get;set;}
public int-PackageTypesId{get;set;}
公共虚拟包类型{get;set;}
}
[表(“tblPackageTypes”)]
公共类包类型
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串详细信息{get;set;}
公共日期时间DueDate{get;set;}
公共ICollection{get;set;}
}

使用导航属性,您需要在包和包类型之间建立FK关系:

[Table("tblPackages")]
public class Packages
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Package Type")]
    public int TypeId { get; set; }

    [Display(Name = "No of SMS")]
    public int AllowedSMS { get; set; }

    [Display(Name = "Time Span in Days")]
    public int? TimeSpan { get; set; }

    public decimal Price { get; set; }

    public int PackageTypesId {get;set;}

    public virtual PackageTypes {get;set;}
}


[Table("tblPackageTypes")]
public class PackageTypes
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Details { get; set; }
    public DateTime DueDate { get; set; }
    public ICollection<Packages> {get;set;}
}
[表(“tblPackages”)]
公共类包
{
公共int Id{get;set;}
[必需]
[显示(名称=“包装类型”)]
公共int类型ID{get;set;}
[显示(姓名=“短信号码”)]
public int AllowedSMS{get;set;}
[显示(Name=“以天为单位的时间跨度”)]
公共int?TimeSpan{get;set;}
公共十进制价格{get;set;}
public int-PackageTypesId{get;set;}
公共虚拟包类型{get;set;}
}
[表(“tblPackageTypes”)]
公共类包类型
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串详细信息{get;set;}
公共日期时间DueDate{get;set;}
公共ICollection{get;set;}
}

将PackageTypes导航属性添加到您的Packages类并按名称访问它:

[Table("tblPackages")]
public class Packages
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Package Type")]
    public int PackageTypesId { get; set; }
    public PackageTypes PackageTypes { get; get; }

    [Display(Name = "No of SMS")]
    public int AllowedSMS { get; set; }

    [Display(Name = "Time Span in Days")]
    public int? TimeSpan { get; set; }

    public decimal Price { get; set; }
}
按照惯例,实体框架将根据命名匹配
PackageTypesId
PackageTypes
属性(尽管如果您将其配置为这样做,可以使用不同的名称,但这是一个更高级的主题)

现在,您可以直接从包对象访问名称:

myPackage.PackageTypes.Name
另外,你可能想用单数来思考你的课程,而不是复数。该类表示单个包,而不是整个集合。与PackageType相同。它使您的代码更易于理解:

Package myPackage = new Package();
myPackage.PackageType.Name

仅当您的类真正代表整个集合而不是单个项目时,才使用复数。

将PackageTypes导航属性添加到您的Packages类并按名称访问它:

[Table("tblPackages")]
public class Packages
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Package Type")]
    public int PackageTypesId { get; set; }
    public PackageTypes PackageTypes { get; get; }

    [Display(Name = "No of SMS")]
    public int AllowedSMS { get; set; }

    [Display(Name = "Time Span in Days")]
    public int? TimeSpan { get; set; }

    public decimal Price { get; set; }
}
按照惯例,实体框架将根据命名匹配
PackageTypesId
PackageTypes
属性(尽管如果您将其配置为这样做,可以使用不同的名称,但这是一个更高级的主题)

现在,您可以直接从包对象访问名称:

myPackage.PackageTypes.Name
另外,你可能想用单数来思考你的课程,而不是复数。该类表示单个包,而不是整个集合。与PackageType相同。它使您的代码更易于理解:

Package myPackage = new Package();
myPackage.PackageType.Name

仅当类真正代表整个集合而不是单个项时才使用复数。

与前面的回答一样,您需要导航属性。从您的代码中,我假设TypeId是FK到PackageTypes中的Id。若是这样,只需创建一个名为Type的属性,其类型为PackageType。当EF找到另一个实体的导航属性时,它会尝试通过附加后缀Id或_Id来查找带有FK的属性

另一方面,如果您希望在多个表的字段中加入一个真正的复合对象,那么您应该为此使用一个视图

问候


Håkan

与前面的答案一样,您需要一个导航属性。从您的代码中,我假设TypeId是FK到PackageTypes中的Id。若是这样,只需创建一个名为Type的属性,其类型为PackageType。当EF找到另一个实体的导航属性时,它会尝试通过附加后缀Id或_Id来查找带有FK的属性

另一方面,如果您希望在多个表的字段中加入一个真正的复合对象,那么您应该为此使用一个视图

问候


Håkan

顺便说一句,我对ASP.NET和EF都是新手,所以如果有任何帮助帖子或教程的话,我在那里会更好!这是一本让你开始学习的好书,如果你看看微软的官方网站entity framework,我想你会发现很多例子!如果不仔细阅读,本文看起来是一个很好的起点!顺便说一句,我是ASP.NET和EF的新手,所以如果有任何帮助文章或教程,我会在那里更好!这是一本让你开始学习的好书,如果你看看微软的官方网站entity framework,我想你会发现很多例子!如果不仔细阅读,本文看起来是一个很好的起点!