具有现有类和现有表的实体框架4.1

时间:2012-03-19 20:37:48

标签: entity-framework-4.1

我有一大堆实现业务逻辑的类。大多数都有一个.Load方法,它使用普通的旧ADO.net来读取我多年来手工编写的Sql Server中的值。这一切都早于Linq2Sql和EF。

现在我想更新我的类库以使用Entity Framework,但我想尽可能轻松地完成它。我已经知道EF可以从我的类中的属性名称推断列和键名,但是我的类有许多属性与列名不对应,而某些属性与数据库的列名不匹配。我宁愿不去.Ignore()每个属性(并记住总是.Ignore()任何未来的属性)和.HasColumnName()所有的差异。

将EF与现有表和现有类一起使用的最简单方法是什么,所以我可以做最小的映射,仍然使用DbContext来.Find()实体和SaveChanges()以及EF支持的所有其他强类型的东西手动浏览我的所有业务类并注释要包含哪些属性?

例如,我希望能够使用db.Customers.Find(123)并让它创建一个Customer实例,从CustomerID = 123的客户中选择*,并将DO存在的列映射到DO尽可能存在的属性并给我一个随时可用的Customer实例,然后我可以根据需要注释任何差异。这是可能的还是我对EF的要求过高?

是否有更聪明的DbContext可以尽最大努力映射属性,以便我可以利用我现有的所有业务类?也许我应该考虑其他一些ORM?

2 个答案:

答案 0 :(得分:1)

试试这个: 从数据库创建数据模型(.edmx)。 编辑模型,添加要添加到数据库的类的属性和过程。 最后,从模型更新数据库(.Edmx)仅选择存在您已更改的表和过程。 你可以看看那些教程 http://msdn.microsoft.com/en-us/data/gg685494 http://msdn.microsoft.com/en-us/data/gg685489

答案 1 :(得分:0)

EF4“Code First”使您可以选择覆盖其默认数据库持久性映射规则,并配置将类映射到数据库的替代方法。

有几种方法可以启用此功能。最简单的方法之一是覆盖DbContext基类上定义的“OnModelCreating”方法:

public class YourContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Mapping
    }
}

您仍然可以使用“查找”按主键搜索您的实体:

var unicorn = context.Unicorns.Find(3);