Asp.net

向實體框架添加附加屬性 4 程式碼優先 CTP 5 實體

  • March 25, 2014

我正在使用ASP.NET MVC 3Entity Framework code first CTP 5。我想知道是否可以添加未映射到表列的其他屬性?

我有一個新聞類,它是這樣定義的:

public class News : Entity
{
  public int NewsId { get; set; }
  public string Title { get; set; }
  public string Body { get; set; }
  public bool Active { get; set; }
}

我的數據庫上下文類:

public class MyContext : DbContext
{
  public DbSet<News> Newses { get; set; }
}

在實體類中,我定義了一個屬性,如下所示:

public IList<RuleViolation> RuleViolations { get; set; }

我還沒有對這部分進行編碼,但我希望在驗證對象時將所有損壞的規則添加到此列表中。我得到的錯誤是:

One or more validation errors were detected during model generation:

   System.Data.Edm.EdmEntityType: : EntityType 'RuleViolation' has no key defined. Define the key for this EntityType.
   System.Data.Edm.EdmEntitySet: EntityType: The EntitySet RuleViolations is based on type RuleViolation that has no keys defined.

這是我的儲存庫程式碼:

public News FindById(int newsId)
{
  return context.Database.SqlQuery<News>("News_FindById @NewsId",
     new SqlParameter("NewsId", newsId)).FirstOrDefault();
}

更新 2011-03-02:

這是我的Entity課:

public class Entity
{
  public IList<RuleViolation> RuleViolations { get; set; }

  public bool Validate()
  {
     // Still needs to be coded
     bool isValid = true;

     return isValid;
  }
}

這是我的RuleViolation課:

public class RuleViolation
{
  public RuleViolation(string parameterName, string errorMessage)
  {
     ParameterName = parameterName;
     ErrorMessage = errorMessage;
  }

  public string ParameterName { get; set; }
  public string ErrorMessage { get; set; }
}

這是我的上下文類:

public class MyContext : DbContext
{
  public DbSet<News> Newses { get; set; }

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
     modelBuilder.Entity<News>().Ignore(n => n.RuleViolations);
  }
}

您可以通過在類的OnModelCreating方法中添加忽略規則來使用 Fluent API 忽略類型MyContext

public class MyContext : DbContext {

 public DbSet<News> Newses { get; set; }

 protected override void OnModelCreating(ModelBuilder builder) {

   builder.Ignore<RuleViolation>()

 }

}

或者您可以使用屬性忽略該NotMapped屬性

public class Enitity {

 [NotMapped]
 public IList<RuleViolation> RuleViolations { get; set; }

 //other properties here

}

然後實體框架將忽略該屬性。

引用自:https://stackoverflow.com/questions/5155853