【发布时间】:2017-12-23 06:55:25
【问题描述】:
我开始在Onion Architecture 中使用.net core 和Entityframework 7!我阅读了this 教程,我认为这是学习以下主题的最佳案例。但是本教程的一部分在我的脑海中提出了一个大问题。喜欢您在此链接页面上看到的内容;在数据层,我们有一些类是我们的模型!!
public class User : BaseEntity
{
public string UserName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
public class UserProfile : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public virtual User User { get; set; }
}
还有一些类像这样映射到上面的模型!!
public class UserProfileMap
{
public UserProfileMap(EntityTypeBuilder<UserProfile> entityBuilder)
{
entityBuilder.HasKey(t => t.Id);
entityBuilder.Property(t => t.FirstName).IsRequired();
entityBuilder.Property(t => t.LastName).IsRequired();
entityBuilder.Property(t => t.Address);
}
}
public class UserMap
{
public UserMap(EntityTypeBuilder<User> entityBuilder)
{
entityBuilder.HasKey(t => t.Id);
entityBuilder.Property(t => t.Email).IsRequired();
entityBuilder.Property(t => t.Password).IsRequired();
entityBuilder.Property(t => t.Email).IsRequired();
entityBuilder.HasOne(t => t.UserProfile).WithOne(u => u.User).HasForeignKey<UserProfile>(x => x.Id);
}
}
它在DbContext 的 OnModelCreating 方法中使用此映射器类在数据库中创建以下模型作为表:
public class ApplicationContext : DbContext
{
public ApplicationContext(DbContextOptions<ApplicationContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
new UserMap(modelBuilder.Entity<User>());
new UserProfileMap(modelBuilder.Entity<UserProfile>());
}
}
我的大问题是:我们可以为 db 上下文中的每个实体使用DbSet<>,并避免在dbcontext 的OnModelCreating 方法中编写映射器和实例化它们。为什么本教程没有使用 dbset ?为什么我们必须创建映射器!
【问题讨论】:
-
请注意,不再有 EF7,它被重命名为 EF Core 1.0,因为它是完全重写,而不是新的迭代。
-
这个问题对于 Stack Overflow 来说过于宽泛且基于意见。
标签: c# asp.net-core-mvc .net-core entity-framework-core onion-architecture