2012-09-09 113 views
2

任何人都可以告訴我有關如何避免使用代碼優先方法將某些屬性從模型映射到表?避免將屬性映射到表

例子:

public class Post 
{ 
    [Key] 
    public int Id { get; set; } 

    [Display(Name = "Posted")] 
    public DateTime Created { get; set; } 

    [Display(Name = "Modified")] 
    public DateTime? Modified { get; set; } 

    [Required] 
    [MaxLength(256)] 
    public string Title { get; set; } 

    [Required] 
    public string Body { get; set; } 

    public int? UserId { get; set; } 

    public string UserName { get; set; } 

    public virtual ICollection<Comment> Comments { get; set; } 

    public virtual ICollection<Tag> Tags { get; set; } 
} 

我想用戶名不映射到表。 EF有可能或不可以?

+0

對不起! – Vengrovskyi

回答

4

添加

[NotMapped] 

屬性所需的屬性:

public class Post 
{ 
    [Key] 
    public int Id { get; set; } 

    [Display(Name = "Posted")] 
    public DateTime Created { get; set; } 

    [Display(Name = "Modified")] 
    public DateTime? Modified { get; set; } 

    [Required] 
    [MaxLength(256)] 
    public string Title { get; set; } 

    [Required] 
    public string Body { get; set; } 

    public int? UserId { get; set; } 

    [NotMapped] 
    public string UserName { get; set; } 

    public virtual ICollection<Comment> Comments { get; set; } 

    public virtual ICollection<Tag> Tags { get; set; } 
} 
3

在代碼中第一個,覆蓋OnModelCreating方法在你的DbContext派生類:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<Post>().Ignore(p => p.UserName); 
} 
+0

好的,我們可以討論[NotMapped] attr。和modelBuilder.Entity ().Ignore(p => p.UserName)之間的區別;還是它 – Vengrovskyi

+1

這是同樣的事情,但這樣你就不需要在實體定義的程序集中對EntityFramework.dll進行依賴了。我經常喜歡在自己的程序集中定義我的實體類所以他們可以單獨測試。 –

+0

啊哈!謝謝,很有用。 – Vengrovskyi