实体框架 - 现有数据库,单独库中的类

时间:2016-05-04 18:50:26

标签: entity-framework

我正在寻找有关在现有数据库中使用实体框架的信息,但是要将我的poco类保存在另一个库中。

我过去曾多次这样做过,但我总是在我的数据访问库中使用EF和我的域类在一个单独的库中使用我的模型类。这不可避免地意味着编写代码来在我的域类和我的模型类之间进行转换。这似乎毫无意义且效率低下,因为这些类通常几乎相同。

有人能指点我进行一次演练,让我的课程由EF在一个单独的图书馆中实现吗?我需要能够做一些小的名称更正(例如Filter_Rule - > FilterRule)。我还希望能够在数据访问库中保留特定于EF的任何内容,以便在需要时可以换出数据访问库。

谢谢,

杰森

1 个答案:

答案 0 :(得分:1)

这应该非常简单。像往常一样创建DbContext代码优先样式,根据需要添加DbSets和配置以告知EF有关您的数据库的信息。将初始化程序设置为null,这样就不会试图弄乱现有的数据库,并且瞧...

public class YourContext : DbContext
{
    public DbSet<YourPoco> YourPocos { get; set; }

    static YourContext()
    {
        Database.SetInitializer<YourContext>(null);
    }

    public YourContext() : base("database_name")
    {
    }

    protected override void OnModelCreating(DbModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<YourPoco>().Property(x => x.FilterRule).HasColumnName("Filter_Rule");
        //OR
        builder.Configurations.Add(new YourPocoConfig());
        //OR
        builder.Configurations.AddFromAssembly(typeof (YourContext).Assembly);
    }
}

public class YourPocoConfig : EntityTypeConfiguration<YourPoco>
{
    public YourPocoConfig()
    {
        HasKey(x => x.Id);
        Property(x => x.FilterRule).HasColumnName("Filter_Rule");
    }
}

如果您担心让所有内容与您的数据库结构相匹配,您可以使用Visual Studio的实体框架工具对您的模型进行反向工程,然后匹配配置或将生成的POCO复制到您的其他库中并将数据注释转换为各个EntityTypeConfiguration课程,以保持POCO的清洁。

MSDN document on reverse engineering code-first