2014-09-25 48 views
0

在我的C#项目,我得到一个错误时,EF尝试创建我的数据库 当我打电话实体框架中使用ModelConfiguration提供了一个错误“是不是有效的属性表达”

Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationDatabase>()); 

的出现的错误错误消息是

The expression 'x => x.Dependancies' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. 

我的域类如下

[Table("LoggedEntity")] 
public class LoggedEntity 
{ 
    public int Id { get; set; } 
} 

[Table("TemplateTaskDependancy")] 
public class TemplateTaskDependancy : LoggedEntity 
{ 
    [Column] 
    public int NeededTaskId { get; set; } 

    [Column] 
    public int TaskId { get; set; } 

    [Required] 
    [ForeignKey("TaskId")] 
    public virtual TemplateTask Task { get; set; } 

    [Required] 
    [ForeignKey("NeededTaskId")] 
    public virtual TemplateTask NeededTask { get; set; } 
} 

[Table("TemplateTask")] 
public class TemplateTask : LoggedEntity 
{ 
    public ICollection<TemplateTaskDependancy> Dependancies; 

    public ICollection<TemplateTaskDependancy> NeededTasks; 

    public virtual Template Template { get; set; } 
} 

[Table("Template")] 
public class Template : LoggedEntity 
{ 
    public string Description { get; set; } 
} 

我的配置类是如下

public class TemplateTaskConfiguration : EntityTypeConfiguration<TemplateTask> 
{ 
    public TemplateTaskConfiguration() 
    { 
     HasMany(x => x.Dependancies) 
      .WithRequired(d => d.Task) 
      .HasForeignKey(d => d.TaskId) 
      .WillCascadeOnDelete(false); 

     HasMany(x => x.NeededTasks) 
      .WithRequired(d => d.NeededTask) 
      .HasForeignKey(d => d.NeededTaskId) 
      .WillCascadeOnDelete(false); 
    } 
} 

我的上下文是如下

public class ApplicationDatabase : DbContext 
{ 
    public DbSet<TemplateTask> TemplateTasks { get; set; } 

    public DbSet<TemplateTaskDependancy> TemplateTaskDependancies { get; set; } 

    public DbSet<Template> Templates { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     modelBuilder.Configurations.Add(new TemplateTaskConfiguration()); 
    } 

    public void InitializeDatabase() 
    { 
      Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationDatabase>()); 
    } 
} 
+0

你确定它不应该是依赖关系?而不是依赖? – 2014-09-25 23:39:33

+0

是的 - 拼写检查通过,但我只使用依赖 – 2014-09-25 23:42:49

回答

2

毫不夸张地说,是什么问题描述。 Dependancies是一个字段,而不是一个属性。只需将其定义为:

public virtual ICollection<TemplateTaskDependancy> Dependancies 
{ 
    get; 
    set; 
} 

它应该可以解决您的问题。

相关问题