entity-framework - Entity Framework Code First 是否允许在单独的文件中进行流畅的映射?

标签 entity-framework ef-code-first fluent-interface

我正在使用 Entity Framework Code First 开发一个相当大的数据库模式。我更喜欢 Fluent API 而不是 Data Annotations 方法,因为它将我的域对象保留为简单的 POCO。

为了使用 Fluent API,我必须在继承自 DbContext 的类中重写 OnModelCreating。

我不喜欢我所有实体的所有映射都在这种方法中。我以前使用过 FluentNHibernate 之类的东西,每个实体都有自己的映射类。 EF有类似的吗?

我想我可以创建自己的接口(interface)来实现映射类并在 OnModelCreating 方法中调用它们。我可以使用反射或 IoC 来发现它们。我没有特别看到这种方法有什么问题,但我想知道 Entity Framework 是否已经提供了类似这样的东西?

最佳答案

您可以为每个派生自 EntityTypeConfiguration<TEntity> 的实体创建一个配置类。并将这些类放入单独的文件中。在您导出的 DbContext您将这些配置类的实例添加到模型构建器。例子:

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        HasKey(u => u.UserName);

        Property(u => u.UserName)
            .HasMaxLength(50)
            .IsRequired();

        // etc.
    }
}

public class RoleConfiguration : EntityTypeConfiguration<Role>
{
    public RoleConfiguration()
    {
        HasKey(r => r.RoleName);

        // etc.
    }
}

派生上下文:
public class MyContext : DbContext
{
    //...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserConfiguration());
        modelBuilder.Configurations.Add(new RoleConfiguration());
    }
}

还有一个ComplexTypeConfiguration<T>您可以从中派生来配置复杂类型。

关于entity-framework - Entity Framework Code First 是否允许在单独的文件中进行流畅的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319762/

相关文章:

java - 具有流畅接口(interface)和继承的自绑定(bind)泛型类型

javascript - 设计一个流畅的 Javascript 接口(interface)来抽象出 AJAX 的异步特性

c# - 在 MySQL 和 Entity Framework 中删除评论及其所有子项的 SQL 查询

c# - 您知道哪些使用 Entity Framework 和 DbContext 的模式和实践?

c# - 将 Entity Framework 从 MVC 移动到另一个项目会导致重新迁移

.net - 模型存储 edmx 文件不会在 Debug模式下生成,但会在 Release模式下生成

c# - EF 代码优先 : DropCreateDatabaseIfModelChanges doesn't work

entity-framework - 流畅的 API 映射

c# - 在同一项目(SQL Server 和 MySql)中使用具有多个数据库和提供程序的 Entity Framework

c# - 由于默认值约束,Code First 迁移失败