gpt4 book ai didi

c# - 使用 Entity Framework 数据库优先数据库上下文与 mvvm View 模型类

转载 作者:太空狗 更新时间:2023-10-30 01:21:41 24 4
gpt4 key购买 nike

我是 MVVM 和 WPF 的新手,我不确定我现在要问的问题是否正确。

我正在制作一个 MVVM WPF 应用程序。我有一个 SQL Server 数据库,我正在使用 Entity Framework 数据库优先为我生成模型类。我已经创建了 View 模型类,从我今天阅读的许多教程中了解到,我需要一个由我的 View 模型类组成的 ObservableCollection。对吗?

问题是 Entity Framework 已经为我生成了一个包含集合的数据库上下文,但它们使用的是模型类,如果上述内容正确,那么我需要让 Entity Framework 数据库上下文使用我的 View 模型类。问题是如何。

我是否需要创建一个适合我需要的新数据库上下文类并使用它,或者是否有我缺少的更简单的方法?这是 Entity Framework 为我生成的模型类:

public partial class Parent
{
public Parent()
{
this.Children = new HashSet<Child>();
}

public int ID { get; set; }
public string Name { get; set; }
public string PIN { get; set; }
public string Account { get; set; }
public string Identity_Card { get; set; }
public string Address { get; set; }

public virtual ICollection<Child> Children { get; set; }
}

提前致谢。如果我遗漏了某些内容或添加了部分代码,请告诉我,我会完成。

最佳答案

像这样的东西很可能足以满足@bas 提到的内容,我同意这是理想的方式..你的 View 模型不是你的模型。

public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel(IRepository<Parent> parentRepo, IViewModelFactory factory)
{
// you might want to set this up as a fancy async method
// because.. it looks better and it's easier to read
Task.Factory
.StartNew(() => parentRepo.GetAll())
.ContinueWith(t =>
{
// Do error checking and all that boring stuff
ParentViewModels =
new ObservableCollection<ParentViewModel>(
t.Result.Select(p => factory.Create<ParentViewModel>(p)));
}, TaskScheduler.FromCurrentSynchronizationContext());
}

private ObservableCollection<ParentViewModel> _parentViewModels;
public ObservableCollection<ParentViewModel> ParentViewModels
{
get
{
return _parentViewModels;
}
set
{
_parentViewModels = value;
RaisePropertyChanged("ParentViewModels");
}
}

// INotifyPropertyChanged implementation goes here
}

// Super secret sauce viewmodelfactory and repository implementations go here

关于c# - 使用 Entity Framework 数据库优先数据库上下文与 mvvm View 模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com