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

发布于 2024-10-19 12:04:08 字数 2112 浏览 2 评论 0原文

我正在使用 ASP.NET MVC 3 和实体框架代码优先 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();
}

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栖竹 2024-10-26 12:04:08

您可以使用 Fluent API 忽略类型,方法是向 MyContext 类的 OnModelCreating 方法添加忽略规则

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

}

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

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.

海风掠过北极光 2024-10-26 12:04:08

您还可以使用:

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

要使用 NotMapped,您必须添加 using System.ComponentModel.DataAnnotations;

编辑:

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文