使用 Entity Framework CodeFirst 映射 table 和视图
Map table and views with Entity Framework CodeFirst
我的数据库中有 1 个 table 和 2 个视图(PeopleView 和 ProjectView)。
Table 名为 Hours,包含 "references" 的列。
[Id] [int] IDENTITY(1,1) NOT NULL,
[Date] [date] NOT NULL,
[PeopleId] [int] NOT NULL, // Reference to PeopleView
[ProjectId] [nvarchar](max) NOT NULL, // Reference to PrijectView
[Hour] [int] NOT NULL,
我是红色的,不可能用视图创建外键。所以我的问题是如何在 EntityFramework 中为这种情况创建映射。
当我从数据库中获得一些 Hours 实体时,我想像这样访问 Project 实体:
hour.project.name
hour.project.id
有可能吗?
小时实体:
public class Hour : Entity<int>
{
[Column(TypeName = "date")]
[Required]
public virtual DateTime Date { get; set; }
public virtual PeopleView People { get; set; }
[Required]
public virtual int? PeopleId { get; set; }
public virtual ProjectView Project { get; set; } // How to access project object from hour object when Project is a View in DB ?
[Required]
public virtual string ProjectId { get; set; }
[Required]
[Column("Hour")]
public virtual int Hours { get; set; }
}
ProjectView 实体:
[Table("ProjectView")]
public partial class ProjectView : Entity<string>
{
[Key]
[Column(Order = 0)]
[StringLength(50)]
public override string Id { get; set; }
[StringLength(255)]
public string Name { get; set; }
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Offer { get; set; }
}
是的,你绝对可以做到这一点。您可以使用 ForeignKey
attribute/annotation 来告诉框架如何建立您的 类 之间的关系(即使数据库中没有实际的外键)。
像这样:
[ForeignKey("PeopleId")]
public virtual PeopleView People { get; set; }
[Required]
public virtual int? PeopleId { get; set; }
[ForeignKey("ProjectId")]
public virtual ProjectView Project { get; set; }
[Required]
public virtual string ProjectId { get; set; }
我的数据库中有 1 个 table 和 2 个视图(PeopleView 和 ProjectView)。
Table 名为 Hours,包含 "references" 的列。
[Id] [int] IDENTITY(1,1) NOT NULL,
[Date] [date] NOT NULL,
[PeopleId] [int] NOT NULL, // Reference to PeopleView
[ProjectId] [nvarchar](max) NOT NULL, // Reference to PrijectView
[Hour] [int] NOT NULL,
我是红色的,不可能用视图创建外键。所以我的问题是如何在 EntityFramework 中为这种情况创建映射。
当我从数据库中获得一些 Hours 实体时,我想像这样访问 Project 实体:
hour.project.name
hour.project.id
有可能吗?
小时实体:
public class Hour : Entity<int>
{
[Column(TypeName = "date")]
[Required]
public virtual DateTime Date { get; set; }
public virtual PeopleView People { get; set; }
[Required]
public virtual int? PeopleId { get; set; }
public virtual ProjectView Project { get; set; } // How to access project object from hour object when Project is a View in DB ?
[Required]
public virtual string ProjectId { get; set; }
[Required]
[Column("Hour")]
public virtual int Hours { get; set; }
}
ProjectView 实体:
[Table("ProjectView")]
public partial class ProjectView : Entity<string>
{
[Key]
[Column(Order = 0)]
[StringLength(50)]
public override string Id { get; set; }
[StringLength(255)]
public string Name { get; set; }
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Offer { get; set; }
}
是的,你绝对可以做到这一点。您可以使用 ForeignKey
attribute/annotation 来告诉框架如何建立您的 类 之间的关系(即使数据库中没有实际的外键)。
像这样:
[ForeignKey("PeopleId")]
public virtual PeopleView People { get; set; }
[Required]
public virtual int? PeopleId { get; set; }
[ForeignKey("ProjectId")]
public virtual ProjectView Project { get; set; }
[Required]
public virtual string ProjectId { get; set; }