表拆分 - 是否可以将表拆分为两个完全独立的实体?

时间:2015-06-05 12:40:01

标签: c# entity-framework table-splitting

我有一个简单的用户表:

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

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

所以我创建了两个实体。

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");
    }
}

但是当我使用这些实体时,我收到以下错误:

消息=&#34;实体类型&#39; UserPassword&#39;和&#39;用户&#39;无法共享表格&#39;用户&#39;因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,并且它们之间具有匹配的主键。&#34;

我不想创建关系。我在每个层次结构中设置表时遇到问题。我不想要一个鉴别者。我真的只想有两种不同的方式来到同一张谨慎的桌子。除了创建两个上下文之外,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

阿。根据我的评论,如果您为@Entity public class Task implements Serializable { private long m_id; private String m_name; @Id @GeneratedValue( strategy = GenerationType.AUTO ) public long getId() { return this.m_id; } public void setId(long id) { this.m_id = id; } public String getName() { return this.m_name; } public void setName(String name) { this.m_name = name; } @OneToMany @JoinColumn( name = "defaultTask" ) private List<Resource> m_relatedResources; public List<Resource> getrelatedResources() { return m_relatedResources; } public void setrelatedResources(List<Resource> relatedResources) { m_relatedResources = relatedResources; } 创建了可更新视图,那么您可以将其用作实体的表。 EF既不知道也不关心实际更新用户表的更新,反之亦然。