[英]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 3
和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: 更新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.