我首先使用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(); }
更新2011-03-02:
这是我的实体类:
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); } }
解决方法
您可以通过向MyContext类的OnModelCreating方法添加忽略规则来使用Fluent API忽略该类型
public class MyContext : DbContext { public DbSet<News> Newses { get; set; } protected override void OnModelCreating(ModelBuilder builder) { builder.Ignore<RuleViolation>() } }
public class Enitity { [NotMapped] public IList<RuleViolation> RuleViolations { get; set; } //other properties here }
然后实体框架将忽略该属性.