Adding additional properties to an entity framework 4 code first CTP 5 entity

北慕城南 提交于 2019-12-21 09:29:47

问题


I am using ASP.NET MVC 3 and Entity Framework code first CTP 5. I was wondering if it is possible to add additional properties that is not mapped to a table column?

I haved a News class and it is defined as such:

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

My database context class:

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

In the entity class I have a property defined like:

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

I have not code this part yet, but I want all broken rules to be added to this list when the object is validated. The error that I am getting is:

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.

Here is my reposity code:

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

UPDATE 2011-03-02:

Here is my Entity class:

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

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

      return isValid;
   }
}

Here is my RuleViolation class:

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

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

Here is my context class:

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

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

回答1:


You can ignore the type using Fluent API by adding an ignore rule to your OnModelCreating method of your MyContext class

public class MyContext : DbContext {

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

  protected override void OnModelCreating(ModelBuilder builder) {

    builder.Ignore<RuleViolation>()

  }

}

Or you can ignore the property by using the NotMapped attribute

public class Enitity {

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

  //other properties here

}

and then Entity Framework will ignore the property.




回答2:


You can also use:

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

To use NotMapped you have to add using System.ComponentModel.DataAnnotations;

Edit:

Now I see that you want to avoid mapping property from base class. It doesn't work with OnModelCreating - it is confirmed bug in CTP5 (I will try to find link later). I'm not sure if it works with NotMappedAttribute. This attribute is just other approach to achieve the same result.



来源:https://stackoverflow.com/questions/5155853/adding-additional-properties-to-an-entity-framework-4-code-first-ctp-5-entity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!