简体   繁体   English

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

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

I am using ASP.NET MVC 3 and Entity Framework code first CTP 5 . 我首先使用ASP.NET MVC 3Entity 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: 更新2011-03-02:

Here is my Entity class: 这是我的Entity类:

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

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. 然后实体框架将忽略该属性。

You can also use: 您还可以使用:

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

To use NotMapped you have to add using System.ComponentModel.DataAnnotations; 要使用NotMapped您必须using System.ComponentModel.DataAnnotations;进行添加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). 它不适用于OnModelCreating - 它是CTP5中确认的错误(我稍后会尝试查找链接)。 I'm not sure if it works with NotMappedAttribute. 我不确定它是否适用于NotMappedAttribute。 This attribute is just other approach to achieve the same result. 此属性只是实现相同结果的其他方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 实体框架CTP5,代码优先。可选的导航属性 - Entity Framework CTP5, code-first. Optional navigation property 实体框架CTP5,代码优先。 嵌套查询错误 - Entity Framework CTP5, code-first. Nested query error 实体框架CTP5,代码优先。有多个级联删除 - Entity Framework CTP5, code-first. Many to many with cascade delete 您如何在Entity Framework 4 Code-First CTP 5中实际执行关系? - How do you actually perform relationships in Entity Framework 4 Code-First CTP 5? 为实体代码优先在MVC 4的基类中的属性中添加“键”属性 - Adding “key” attribute to properties in a base class in MVC 4 for Entity Code First 如何为实体框架实现其他实体属性? - How can I implement additional entity properties for Entity Framework? MCV3实体框架4代码优先:将子对象添加到数据库 - MCV3 Entity Framework 4 Code First: Adding Sub Objects to the db 在带有外行键字段的代码优先迁移的Entity Framework 7中添加索引 - Adding an Index in Entity Framework 7 with Code First Migrations on a field that is a Foreign Key 在实体框架中使用数据库优先实体和代码优先实体 - Using database first entity with code first entity in entity framework MembershipUser和Entity Framework Code First - MembershipUser and Entity Framework Code First
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM