C# 表拆分-是否可以将表拆分为两个完全独立的实体?
我有一个简单的用户表:C# 表拆分-是否可以将表拆分为两个完全独立的实体?,c#,entity-framework,table-splitting,C#,Entity Framework,Table Splitting,我有一个简单的用户表: 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; } }
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");
}
}
类用户映射:EntityTypeConfiguration
{
公共用户映射()
{
属性(p=>p.Id);
}
}
类密码映射:EntityTypeConfiguration
{
公共密码映射()
{
ToTable(“用户”);
属性(p=>p.Id);
}
}
但是,当我使用这些实体时,会出现以下错误:
Message=“实体类型‘UserPassword’和‘User’不能共享表‘User’,因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系,并且主键匹配。”
我不想建立关系。我在设置每个层次结构的表时遇到问题。我不要鉴别器。我真的只想有两种不同的方式来进入同一张桌子,这是谨慎的。除了创建两个上下文,还有其他方法吗?啊。根据我的评论,如果您为
UserPassword
创建了一个可更新的视图,那么您可以将其用作实体的表。EF既不知道也不关心实际更新用户表的更新,反之亦然。“我不想创建关系。”但当他们被安排住在同一个表中时,您已经这样做了。插入新用户时会发生什么情况?密码可为空。添加新用户不会影响密码。我想我应该在数据库中为UserPassword
创建一个可更新的视图,然后将其用作表来解决这个问题。太棒了。这正是我想要的解决方案。非常感谢。