如何通过现有数据库的逆向工程创建EF Code First实现?

时间:2013-10-28 12:17:29

标签: c# entity-framework

我已经运行了EF 5的原型Code First实现大约一年了,但现在管理层已经说是,并且是时候将原型应用到整个数据库了。

当我第一次编写Code First项目时,我使用EF Powertools来反向编写Code First项目。这给了我一个Context,然后我更新了,每个表都有大量的POCO类,每个实体都有一个Map类。

这仍然是创建Code First实现的最佳方式吗?

我读了here我还可以通过DbContext Generator生成代码优先模型,但是当我尝试这个时,似乎我必须从现有文件中创建一个新的*.edmx文件数据库,然后我可以使用DbContext Generator。

但是,当我在这里执行第一步并创建*.edmx文件时,我可以看到POCO类和生成的上下文。我需要DbContext Generator吗?我的意思是说,我还没有把它带到桌面上?

从我所看到的,不会生成Map文件,而是先前保存在该文件中的数据现在是Entities.Designer.cs文件的一部分,但现在有更多代码用于处理对象更改等

[编辑]任何人都可以举例说明在对现有数据库进行逆向工程时应该如何构建Code First实现?

如果有帮助,我使用EF6并使用ODAC v11.2连接到Oracle数据库。

3 个答案:

答案 0 :(得分:1)

我按如下方式创建实体:

public class Customer
{
    [Key]
    public int ID{get;set;}

    public string Name{get;set;}

    public string GroupName{get;set;}

    public CustomerGroup Group{get;set;}
}

public class CustomerGroup
{
    [Key]
    public int ID{get;set;}

    public string Name{get;set;}

    public List<Customer> Groups{get;set;}
}

然后您需要一个继承自DB上下文的上下文

public class Context : DbContext
{
    public DbSet<Customer> Customers{get;set;}
    public DbSet<CustomerGroup> Groups{get;set;}
}

如果App.Config中的连接字符串带有上下文类的名称,则可以实例化上下文,它应该在连接字符串中给定的位置创建一个包含给定实体的数据库。

答案 1 :(得分:0)

看看这些链接,他们肯定会帮助您:)

Oracle odp and entity

以及该网站上的一些内容。

An answered error

和这个

SaveChanges error help

我从未使用过oracle,但我可以先实体框架代码,所以你可以看看它们。

干杯!

答案 2 :(得分:0)

请关注我的github项目。我已经首先实现了代码,工作单元和存储库模式。您可以将其用作启动项目。

https://github.com/erandika1986/CodeFirst

谢谢, Erandika