2

我有一个简单的用户表:

CREATE TABLE User
 (
UserId int,
UserName nvarchar(35),
Password nvarchar(size),
 );

我想在 EF6 中将其拆分为两个实体。用户和用户密码。这些代表了两种截然不同的业务需求,但碰巧存在于同一张桌子上。

所以我创建了两个实体。

public class User
{
 public int Id { get; set; }
 public string Username { get; set; }
}

public class UserPassword
{
 public int Id { get; set; }
 public string Password{ get; set; }
}

我有这样的地图

class UserMap : EntityTypeConfiguration<User>
{
    public UserMap()
    {
        Property(p => p.Id).HasColumnName("UserId");
    }
}

class PasswordMap : EntityTypeConfiguration<UserPassword>
{
    public PasswordMap()
    {
        ToTable("User");
        Property(p => p.Id).HasColumnName("UserId");
    }
}

但是当我使用这些实体时,会出现以下错误:

Message = "实体类型 'UserPassword' 和 'User' 不能共享表 'User',因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。"

我不想建立关系。我在按层次结构设置表时遇到问题。我不想要一个歧视者。我真的只想有两种不同的方式来谨慎地到达同一张桌子。除了创建两个上下文之外,还有其他方法吗?

4

1 回答 1

1

啊。根据我的评论,如果您创建了一个可更新的视图,UserPassword那么您可以将其用作实体的表。EF 既不知道也不关心实际更新用户表的更新,反之亦然。

于 2015-06-05T13:08:38.133 回答