假设数据库中有两个表:
User
int UserId
string Name
Task
int TaskId
string Description
int TaskCreatorId
int TaskAssigneeId
在任务和用户之间定义了两个外键:TaskCreatorId – UserId
和TaskAssigneeId - UserId
我已经有数据库,并使用"数据库优先"方法。使用实体框架中的代码生成,将自动创建两个POCO
类:
用户.cs
public int UserId
public string Name
public ICollection<Task> Tasks
public ICollection<Task> Tasks1
任务.cs
public int TaskId
public string Description
public int TaskCreatorId
public int TaskAssigneeId
public User User
public User User1
为了拥有有意义的实体,我必须改变:
public ICollection<Task> Tasks --> public ICollection<Task> CreatedTasks
public ICollection<Task> Tasks1 --> public ICollection<Task> AssignedTaska
和
public User User --> public User TaskCreator
public User User1 --> public User TaskAssignee
如果我转到Model.edmx并在Model Browser –> Associations
中进行更改并设置所需的映射,则在第一次从数据库更新后,它将被覆盖。
怎么做?
你熟悉视图模型吗? 您可以创建以不同方式表示实体的类,以满足您的需求。
因此,您将创建名为viewmodels的新文件夹,创建一个具有适当名称的新类,并在那里添加成员 - TaskCreator,TaskAssignee等。这是一种非常常见的标准设计模式。
您可以只搜索视图模型,或者这里有一些可以帮助您入门的东西......
http://www.markwithall.com/programming/2013/03/01/worlds-simplest-csharp-wpf-mvvm-example.html
在 EDMX 中,关联是属性和数据库列之间的映射。如果更改此映射,则会更改属性链接到的列。您要做的是更改属性名称并保持相同的关联。