C# 在实体框架中使用ModelConfiguration会出现错误;不是有效的属性表达式";

C# 在实体框架中使用ModelConfiguration会出现错误;不是有效的属性表达式";,c#,entity-framework,C#,Entity Framework,在我的C#项目中,当EF试图创建我的数据库时,我得到一个错误 错误发生在我调用时 Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationDatabase>()); 我的域类如下 [Table("LoggedEntity")] public class LoggedEntity { public int Id { get; set; } } [Table("TemplateTaskDependanc

在我的C#项目中,当EF试图创建我的数据库时,我得到一个错误 错误发生在我调用时

Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationDatabase>());
我的域类如下

[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>());
    }
}
[表(“日志身份”)]
公共类日志身份
{
公共int Id{get;set;}
}
[表(“TemplateTaskDependency”)]
公共类TemplateTaskDependency:LoggeIdentity
{
[专栏]
public int needtaskid{get;set;}
[专栏]
public int TaskId{get;set;}
[必需]
[外键(“任务ID”)]
公共虚拟模板任务任务{get;set;}
[必需]
[外国钥匙(“需要的孩子”)]
公共虚拟模板任务需要任务{get;set;}
}
[表(“模板任务”)]
公共类TemplateTask:日志身份
{
公共ICollection依赖性;
公共信息收集需要的任务;
公共虚拟模板模板{get;set;}
}
[表格(“模板”)]
公共类模板:LoggedEntity
{
公共字符串说明{get;set;}
}
我的配置类如下

[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>());
    }
}
公共类TemplateTaskConfiguration:EntityTypeConfiguration
{
公共模板任务配置()
{
HasMany(x=>x.依赖性)
.WithRequired(d=>d.Task)
.HasForeignKey(d=>d.TaskId)
.WillCascadeOnDelete(假);
HasMany(x=>x.neededTask)
.WithRequired(d=>d.NeededTask)
.HasForeignKey(d=>d.needtaskid)
.WillCascadeOnDelete(假);
}
}
我的背景如下

[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>());
    }
}
公共类应用程序数据库:DbContext
{
公共数据库集模板任务{get;set;}
公共DbSet templateTaskDependencies{get;set;}
公共数据库集模板{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
添加(新的TemplateTaskConfiguration());
}
public void InitializeDatabase()
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
}

确切地说,问题在于所描述的内容<代码>依赖项是一个字段,而不是属性。只需将其定义为:

public virtual ICollection<TemplateTaskDependancy> Dependancies
{
     get;
     set;
}
公共虚拟ICollection依赖项
{
得到;
设置
}

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

您确定它不应该是依赖项吗?而不是依赖性?是的-拼写检查都通过,但我只使用了依赖性