Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架一对多保存数据,但无法获取_C#_.net_Wpf_Entity Framework_One To Many - Fatal编程技术网

C# 实体框架一对多保存数据,但无法获取

C# 实体框架一对多保存数据,但无法获取,c#,.net,wpf,entity-framework,one-to-many,C#,.net,Wpf,Entity Framework,One To Many,我有WPF应用程序处理表。我使用了一个SQLite数据库,其中包含两个具有一对多关系的表。所有数据都由程序保存,但当我下次打开程序时,每个Project字段ICollection projectBudgets都有0个项目,但数据库中有很多项目 代码如下: 使用与表的数据绑定为WPF初始化ViewModel。它还保存数据 public ViewModel() { Projects = context.Projects.ToList(); } pub

我有WPF应用程序处理表。我使用了一个SQLite数据库,其中包含两个具有一对多关系的表。所有数据都由程序保存,但当我下次打开程序时,每个
Project
字段
ICollection projectBudgets
都有0个项目,但数据库中有很多项目

代码如下:

使用与表的数据绑定为WPF初始化ViewModel。它还保存数据

    public ViewModel()
    {
        Projects = context.Projects.ToList();
    }

    public List<Project> Projects { get { return projects; } set { projects = value; OnPropertyChanged("Projects"); } }

    private List<Project> projects;

    public void Save()
    {
        foreach (var item in Projects)
        {
            context.Entry(item).State = item.Id == 0 ?
                              EntityState.Added :
                              EntityState.Modified;
        }
        context.SaveChanges();
    }

class Project : INotifyPropertyChanged
{
    [Key]
    public int Id { get { return id; } set { id = value; OnPropertyChanged("Id"); } }
    private int id;
    private string projectName;
    public string ProjectName { get { return projectName; } set { projectName = value; OnPropertyChanged("ProjectName"); } }
    public double Amount { get { return amount; } set { amount = value; OnPropertyChanged("Amount"); } }
    private double amount;
    public virtual ICollection<Budget> ProjectBudget { get; set; }

    public void OnPropertyChanged([CallerMemberName]string prop = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public Project()
    {
        ProjectBudget = new List<Budget>();
    }
}

class Budget
{
    [Key]
    public int Id { get; set; }
    public string ProcessName { get; set; }
    public int Counter { get; set; }
    public double Part { get; set; }
    public double Amount { get; set; }

    public Budget()
    {
    }
}

class BudgetsContext : DbContext
{
    public BudgetsContext() : base("DefaultConnection")
    { }

    public DbSet<Project> Projects { get; set; }
}
公共视图模型()
{
Projects=context.Projects.ToList();
}
公共列表项目{get{return Projects;}set{Projects=value;OnPropertyChanged(“Projects”);}
私人清单项目;
公共作废保存()
{
foreach(项目中的var项)
{
context.Entry(item.State=item.Id==0?
EntityState。添加了:
修改的实体状态;
}
SaveChanges();
}
类别项目:INotifyPropertyChanged
{
[关键]
公共int Id{get{return Id;}set{Id=value;OnPropertyChanged(“Id”);}
私有int-id;
私有字符串projectName;
公共字符串ProjectName{get{return ProjectName;}set{ProjectName=value;OnPropertyChanged(“ProjectName”);}
公共双倍金额{get{return Amount;}set{Amount=value;OnPropertyChanged(“Amount”);}
私人双倍金额;
公共虚拟ICollection项目预算{get;set;}
公共void OnPropertyChanged([CallerMemberName]string prop=”“)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(prop));
}
}
公共事件属性更改事件处理程序属性更改;
公共工程()
{
ProjectBudget=新列表();
}
}
班级预算
{
[关键]
公共int Id{get;set;}
公共字符串ProcessName{get;set;}
公共int计数器{get;set;}
公共双部分{get;set;}
公共双倍金额{get;set;}
公共预算()
{
}
}
类BudgetContext:DbContext
{
public BudgetContext():基本(“DefaultConnection”)
{ }
公共数据库集项目{get;set;}
}

当您说数据库中有大量数据时,这些是使用上述代码保存的新预算,还是与项目关联的现有预算记录?请提供您正在使用的任何映射。您的预算实体既没有定义项目导航属性,也没有定义ProjectId列,因此从提供的内容来看,我看不出EF如何将两者关联起来。您需要为EF提供一种方法。尝试执行
Projects=context.Projects.Include(p=>p.ProjectBudget.ToList()