代码之家  ›  专栏  ›  技术社区  ›  Prashant Lakhlani

通过更改连接字符串,Entity Framework 4.0是否可以与任何数据库一起工作?

  •  0
  • Prashant Lakhlani  · 技术社区  · 13 年前

    我想知道,如果我使用Entity Framework 4.0和SQL Server开发和应用程序,然后将连接字符串更改为我的SQL,它是否可以正常工作?

    其他需要考虑的因素是什么?

    3 回复  |  直到 13 年前
        1
  •  1
  •   RPM1984    13 年前

    不,我认为这还不够。

    Afaik-实体框架的核心LINQ提供者( ObjectQuery<T> )是为SQL Server提供程序设计的。

    我的建议是把你的逻辑封装在 知识库 ,并保持您的界面非常高级(不依赖于EF):

    public interface IRepository<T> where T : class
    {
       public T FindSingle(int id);
       public ICollection<T> FindAll(Expression<Func<T,bool>> predicate);
       public void Add(T entity);
       public void Remove(T entity);
    }
    

    然后使用EF LINQ提供程序(例如 SqlServerRepository<T> : IRepository<T> )然后,当您切换到MySQL时,实现另一个存储库实现(例如 MySqlRepository<T> : IRepository<T> )

    关键是不要使用像 IQueryable<T> 对于您的存储库,这允许将LINQ代码应用到DAL,这可能不适用于SQL Server和MySQL。

        2
  •  0
  •   Darren Lewis    13 年前

    仅仅更改连接字符串是不够的,因为默认情况下,ef实现了一个发出特定于SQL Server的T-SQL的提供程序。还有其他的ef提供者(尽管我上次看它们只是beta版本),包括一个用于Oracle和MySQL的提供者,它可以将您的linq查询正确地转换为特定于db的t-sql。

        3
  •  0
  •   DamienG    13 年前

    如果您正在讨论更改数据库连接以在SQL Server之间切换,那么这很好。

    如果您想在不同的数据库系统之间进行切换,例如Oracle、MySQL等,那么您需要一个提供程序…您还需要修改每个字段的存储类型,以匹配底层系统的约束。

    您可能希望先检查代码的ef ctp,该代码能够在运行时通过与提供程序交谈来重新生成存储层,以找到给定clr类型的最佳存储类型匹配。