映射1:1和1:N关系,没有额外的关系键列

时间:2018-02-15 13:27:35

标签: c# entity-framework

假设我有以下DTO:

class User
{
  string Name { get; }
  Permissions Permissions { get; }
}

class Permissions
{
  // User Parent { get; } - may or may not add this, whatever is easier
  bool SomePermissionProperty { get; }
  IEnumerable<NestedPermission> NestedPermissions { get; }
}

class NestedPermission
{
  // Permissions Parent { get; } - may or may not add this, whatever is easier
  bool SomeNestedProperty { get; }
}

所以我有一个User对象。每个用户只有一个与1对1关系关联的权限对象。每个Permissions对象都有几个与之关联的NestedPermissions对象,即1对多关系。

理论上,我认为应该有这样的表格布局:

Table: User
  string Name

Table: Permissions
  string UserName  // refers to User.Name
  bool SomePermissionProperty

Table: NestedPermission
  string UserName  // refers to Permissions.UserName, which in turn refers to User.Name
  bool SomeNestedProperty

有没有办法以一种能够生成如此简单的表格布局的方式在EntityFramework Core中流畅地映射我的DTO?

(到目前为止,我只发现了将阴影属性添加为关系键的方法,但我试图避免使用额外的列。或者,当我也向子对象添加导航属性时,EF开始使用关系键覆盖列而不是它们的实际值,例如User.Name将包含一些EF生成的值,用于描述用户和权限之间的关键,而不是其实际值)

2 个答案:

答案 0 :(得分:0)

尝试使用Entity Framework并将1:1关系规范化,正如here所述。

您称之为&#34;额外关系键列&#34;,对于任何标准化都是必需的。实体框架为1:N和M:N关系生成必要的列和属性。

答案 1 :(得分:0)

EF使用一些约定来映射PK和FK。如果您需要一些自定义名称,则应在DbContext中手动配置它:

.last_sync

你的实体:

$?

这是远远的FK。你仍然必须以某种方式定义PK,我假设这部分你没有为简洁起见..