C# 在实体框架中使用ModelConfiguration会出现错误;不是有效的属性表达式";
在我的C#项目中,当EF试图创建我的数据库时,我得到一个错误 错误发生在我调用时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
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依赖项
{
得到;
设置
}
它应该可以解决您的问题。您确定它不应该是依赖项吗?而不是依赖性?是的-拼写检查都通过,但我只使用了依赖性