当我有现有的POCO类和具有复杂/自定义地图ping的现有表时,如何使用EF4?

时间:2013-01-14 00:57:54

标签: c# orm entity-framework-4 mapping

我有一组基于ado.net的现有(遗留)业务对象(类)。他们有从SQL服务器和方法加载自己的方法来保存自己。这在EF或linq2sql之前很久就存在了。

我想使用EF及其提供的所有好处。问题是我的类实现逻辑加载自己使用自定义逻辑将ado.net值映射到其属性。例如,他们可以使用“T”和“F”字符映射到bool,或者可以提取映射到集合的CSV值,或者可以将varchar值映射到Enums。在.Load()方法中没有问题,因为已经编写了所有这样做的逻辑。这个程序很老了。

例如,我现有的Customers类对应于一个客户表,但无法自动映射其值。

理想情况下,我想达到一个可以使用数据上下文并获得IQueryable结果的点,这样我就可以使用linq查询数据库并保存更改但是当行从数据库中出来时我需要运行一些获取类创建的自定义逻辑。

那么我如何将EF4与现有模型和现有的poco类一起使用,这些类需要自定义逻辑以尽可能最不痛苦的方式将SQL值映射到属性(即现有的.Load()和.Save()方法)? / p>

1 个答案:

答案 0 :(得分:1)

假设您的所有实体类都有Initialize方法,您可以在EF实体化实体时加载属性。

 public class YourContext : DbContext
 {
    protected ObjectContext ObjectContext
    {
        get
        {
            return ((IObjectContextAdapter)this).ObjectContext;
        }
    }

    public YourContext(string connectionString):base(connectionString)
    {
        ObjectContext.ObjectMaterialized += ObjectMaterialized;
    }

    void ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
    {
        dynamic entity = e.Entity;
        entity.Initialize();
    }
 }