【问题标题】:How to set custom name of ICollection property in automatically generated POCO entity, using Entity Framework如何使用实体框架在自动生成的 POCO 实体中设置 ICollection 属性的自定义名称
【发布时间】:2014-11-13 08:19:50
【问题描述】:

假设数据库中有两个表:

User 
int UserId 
string Name

Task 
int TaskId 
string Description 
int TaskCreatorId 
int TaskAssigneeId

TaskUser之间定义了两个外键TaskCreatorId – UserIdTaskAssigneeId - UserId

我已经有数据库,并使用“数据库优先”的方法。在 Entity Framework 中使用 Code Generation,会自动创建两个 POCO 类:

用户.cs

public int UserId
public string Name
public ICollection<Task> Tasks
public ICollection<Task> Tasks1

Task.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 –&gt; Associations 中进行更改并设置所需的映射,它会在第一次从数据库更新后被覆盖。

如何做到这一点?

【问题讨论】:

  • 您是否进行了新的 EF 迁移?我不确定这是否是数据库优先方法的正确方法......
  • 究竟做了什么改变?类模型中的更改不应被模型更新覆盖。

标签: c# entity-framework poco ef-database-first


【解决方案1】:

您熟悉视图模型吗?您可以创建以不同方式代表您的实体的类以满足您的需求。

因此,您将创建一个名为 viewmodels 的新文件夹,创建一个具有适当名称的新类,并在其中添加您的成员 - TaskCreator、TaskAssignee 等。这是一种非常常见的标准设计模式。

您可以只搜索视图模型,或者这里有一些可以帮助您入门的东西...

http://www.markwithall.com/programming/2013/03/01/worlds-simplest-csharp-wpf-mvvm-example.html

【讨论】:

    【解决方案2】:

    在 EDMX 中,关联是属性和数据库列之间的映射。如果更改此映射,则更改属性链接到的列。您要做的是改为更改属性名称并保持相同的关联。

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多