1

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

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

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

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

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

4

1 回答 1

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();
    }
 }
于 2013-01-14T04:19:15.523 回答