【发布时间】:2015-11-20 20:49:13
【问题描述】:
我对如何通过首先使用代码将两个实体映射到同一个表感兴趣。这是一个例子:
public class User
{
[Key]
public int UserId { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
public bool Active { get; set; }
public DateTime Created { get; set; }
}
public class UserViewModel
{
[Key]
public int UserId { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
}
基本上我已经厌倦了构建存储库。我想在模型构建器中为配置门户、用户门户和其他服务映射所有可能的模型,并且只使用 DbContext 进行所有操作。我想将 User 类设置为层次结构的顶部和构建数据库的类,而所有其他模型应该只用于各种应用程序。
我不想使用自动映射器。我还进行了大量的手动编码,这只是浪费了我的时间,而且每一次修改都需要我返回存储库并重新编码——这让我很恼火。
我尝试在模型构建器中使用它,但它警告我层次结构无效:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().Map(p => { p.ToTable("Users"); });
modelBuilder.Entity<UserViewModel>().Map(p => { p.ToTable("Users"); });
}
另外请记住,我并不是要实现“表拆分”。我不希望我的表被拆分为两个实体,我希望所有列都可以为空,除了一个具有主键的列,并允许不同的应用程序/Web 服务/Web 门户填充尽可能多的数据访问。
感谢所有提示:)
【问题讨论】:
-
看看通用存储库模式。您只需要一个用于所有实体的单一基础存储库。我感受到了你的痛苦,我为每个实体使用了一个存储库,直到我发现了通用存储库模式。
标签: entity-framework ef-code-first