向实体框架添加其他属性 4 代码优先 CTP 5 实体
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Fluent API 忽略类型,方法是向
MyContext
类的OnModelCreating
方法添加忽略规则,或者您可以使用
NotMapped 属性
,然后实体框架将忽略该属性。
You can ignore the type using Fluent API by adding an ignore rule to your
OnModelCreating
method of yourMyContext
classOr you can ignore the property by using the
NotMapped
attributeand then Entity Framework will ignore the property.
您还可以使用:
要使用
NotMapped
,您必须添加using System.ComponentModel.DataAnnotations;
编辑:
现在我看到您希望避免从基类映射属性。它不适用于 OnModelCreating - 它已被确认为 CTP5 中的错误(我稍后会尝试找到链接)。我不确定它是否适用于 NotMappedAttribute。此属性只是实现相同结果的其他方法。
You can also use:
To use
NotMapped
you have to addusing 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.