向实体框架添加其他属性4首先编码CTP 5实体

时间:2022-11-27 06:53:21

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?

我首先使用ASP.NET MVC 3和实体框架代码CTP 5.我想知道是否可以添加未映射到表列的其他属性?

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:

更新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:

这是我的RuleViolation类:

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

2 个解决方案

#1


17  

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

您可以通过向MyContext类的OnModelCreating方法添加忽略规则来使用Fluent API忽略该类型

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

或者,您可以使用NotMapped属性忽略该属性

public class Enitity {

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

  //other properties here

}

and then Entity Framework will ignore the property.

然后实体框架将忽略该属性。

#2


4  

You can also use:

您还可以使用:

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

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

要使用NotMapped,您必须使用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.

现在我看到你想避免从基类映射属性。它不适用于OnModelCreating - 它是CTP5中确认的错误(我稍后会尝试查找链接)。我不确定它是否适用于NotMappedAttribute。此属性只是实现相同结果的其他方法。

#1


17  

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

您可以通过向MyContext类的OnModelCreating方法添加忽略规则来使用Fluent API忽略该类型

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

或者,您可以使用NotMapped属性忽略该属性

public class Enitity {

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

  //other properties here

}

and then Entity Framework will ignore the property.

然后实体框架将忽略该属性。

#2


4  

You can also use:

您还可以使用:

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

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

要使用NotMapped,您必须使用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.

现在我看到你想避免从基类映射属性。它不适用于OnModelCreating - 它是CTP5中确认的错误(我稍后会尝试查找链接)。我不确定它是否适用于NotMappedAttribute。此属性只是实现相同结果的其他方法。