簡體   English   中英

使用Entity Framework CodeFirst映射表和視圖

[英]Map table and views with Entity Framework CodeFirst

我的數據庫中有1個表和2個視圖(PeopleView和ProjectView)。

名為Hours的表具有作為對視圖的“引用”的列。

[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屬性/注釋來告訴框架如何建立類之間的關系(即使數據庫中沒有實際的外鍵)。

像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM