我有一个简单的用户表:
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;
我不想创建关系。我在每个层次结构中设置表时遇到问题。我不想要一个鉴别者。我真的只想有两种不同的方式来到同一张谨慎的桌子。除了创建两个上下文之外,有没有办法做到这一点?
答案 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既不知道也不关心实际更新用户表的更新,反之亦然。