在实体框架中使用ModelConfiguration会显示错误“不是有效的属性表达式 [英] using ModelConfiguration in Entity Framework gives an error " is not a valid property expression "

查看:37
本文介绍了在实体框架中使用ModelConfiguration会显示错误“不是有效的属性表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的C#项目中,当EF尝试创建数据库时出现错误当我致电

In my C# project, I get an error when EF attempts to create my database The error occurs when I call

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>());
    }
}

推荐答案

从字面上看,问题在于所描述的内容.依赖关系是一个字段,而不是一个属性.只需将其定义为:

Quite literally, the problem is what is described. Dependancies is a field, not a property. Just define it as:

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

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

And it should solve your problem.

这篇关于在实体框架中使用ModelConfiguration会显示错误“不是有效的属性表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆