Entity framework 是否可以获取任何数据库';s元素作为一组可查询的类,并使用EF?

Entity framework 是否可以获取任何数据库';s元素作为一组可查询的类,并使用EF?,entity-framework,class,xml-serialization,data-modeling,extraction,Entity Framework,Class,Xml Serialization,Data Modeling,Extraction,我正在尝试制作一个应用程序,在这个应用程序中,开发人员和最终用户都可以从关系数据库(在运行时选择)中检索数据,而无需编写任何SQL代码(最好在与数据库交互时不进行字符串连接)。 该应用程序的目的是实现两件事:表达式树生成器的GUI和由其生成的树的XML序列化 我想问一些关于如何使事情顺利进行的指导或提示。我不希望其他人为我写这篇文章——这是我的项目,我将是编写代码的人 因此,我的问题是: 在运行时仅使用连接字符串是否可以创建对象模型并在集合中寻址DB元素?例如,所有表、视图、函数和存储过程的列表

我正在尝试制作一个应用程序,在这个应用程序中,开发人员和最终用户都可以从关系数据库(在运行时选择)中检索数据,而无需编写任何SQL代码(最好在与数据库交互时不进行字符串连接)。 该应用程序的目的是实现两件事:表达式树生成器的GUI和由其生成的树的XML序列化

我想问一些关于如何使事情顺利进行的指导或提示。我不希望其他人为我写这篇文章——这是我的项目,我将是编写代码的人

因此,我的问题是:

  • 在运行时仅使用连接字符串是否可以创建对象模型并在集合中寻址DB元素?例如,所有表、视图、函数和存储过程的列表

  • 可以在扩展方法中使用上述列表的元素,以便构建表达式树吗

  • 我可以使用Metadata Workspace类和ItemCollections从只有CSDL、SSDL和MDL文件(但没有实体类)的数据库中检索这些列表吗

  • 我可以使用LINQ to XML来序列化表达式树的结果,还是必须使用其他一些序列化技术,特定于实体框架? (如此处所示的示例:)

  • PS:以下是我迄今为止研究的一些笔记: 1.例如,当DataContext只接收到连接字符串时,DataContext.GetTable()方法(是的,弱类型方法,而不是泛型方法)没有检索任何数据

  • 我调用EdmGen工具是为了生成模式工件,到目前为止,我已经阅读了它们的属性,但我仍然在尝试获取一些可以在lambda表达式中使用的元素列表(例如表)

  • 如果我理解正确,在实体框架中,我可以使用诸如元数据工作区和ItemCollections之类的类以及EdmGen工具来创建必要的对象集,以便在应用程序中将概念模式表示为对象模型

  • 我已经在这里和MSDN上浏览了Entity Framework编程指南以及其他相关主题,但到目前为止,我还没有找到任何与此场景相关的信息。 昨天我拿到了《编程实体框架》一书,我希望其中有一些答案。如果我发现任何线索,我会更新这个问题

    因此,困惑和仍在寻找,我提前感谢您对此事的任何帮助

    致以最良好的祝愿,
    Borislav

    这些问题在理论上很重,在应用上却很轻,因此很难理解你想要完成什么。根据我从你们的问题中所能理解的,以下是我最好的答案。如果您能更新一些关于您的需求的详细信息,我可以对它们进行优化


    1:这听起来像“我的实体模型是否可以在运行时自动生成,并使用connectionstring包含我的所有数据库对象?”:

    否。您的实体模型由实体数据模型(即
    MyModel.edmx.
    )定义。这用于生成对象服务类
    mymodelnities.
    该模型必须存在且可用,以便实体框架提供程序对其执行查询

    2:如果“表达式树”是指lambda或LINQ语法:

    任何实现IEnumerable、IQueryable或其他类似接口的集合对象都可以使用LINQ(
    来自EntitySet中的i…选择i
    )或lambda(
    ),其中(x=>x.Id==5)
    )语法进行查询

    3:如果您的意思是,您是否可以单独使用EDM定义(CSDL、SSDL、MDL)直接查询数据库:

    这就是LINQtoEntities所做的:将LINQ查询转换为SQL查询。你为什么要重塑L2E提供商


    4:实体对象序列化在EFV1中有点奇怪(读:坏了)。实体对象带有很多EF包袱(它们派生自EntityObject并带有额外的属性),因此序列化可能很困难。它对您的效果如何将取决于您的实体对象以及它们序列化后您对它们所做的操作。

    这些问题重于理论,轻于应用程序,因此很难理解您试图实现的目标。根据我从你们的问题中所能理解的,以下是我最好的答案。如果您能更新一些关于您的需求的详细信息,我可以对它们进行优化


    1:这听起来像“我的实体模型是否可以在运行时自动生成,并使用connectionstring包含我的所有数据库对象?”:

    否。您的实体模型由实体数据模型(即
    MyModel.edmx.
    )定义。这用于生成对象服务类
    mymodelnities.
    该模型必须存在且可用,以便实体框架提供程序对其执行查询

    2:如果“表达式树”是指lambda或LINQ语法:

    任何实现IEnumerable、IQueryable或其他类似接口的集合对象都可以使用LINQ(
    来自EntitySet中的i…选择i
    )或lambda(
    ),其中(x=>x.Id==5)
    )语法进行查询

    3:如果您的意思是,您是否可以单独使用EDM定义(CSDL、SSDL、MDL)直接查询数据库:

    这就是LINQtoEntities所做的:将LINQ查询转换为SQL查询。你为什么要重塑L2E提供商


    4:实体对象序列化在EFV1中有点奇怪(读:坏了)。实体对象带有很多EF包袱(它们派生自EntityObject并带有额外的属性),因此序列化可能很困难。它对您的效果将取决于您的实体对象以及序列化后您对它们所做的操作。

    再次感谢dave的pos
    Table.Select(t => t.Col1, t.Col2, Col3)
    
    foreach(String UsersChosenColumn in TableColumnsArray)
       XDocumentXElement(UsersChosenColumn, (Table.Select(t => t.TableColumnsArray[UsersChosenColumn]))
    
    <Order>
     <Name>Some Order Name</OrderName>
     <Price>Some Price</Price>
      <Products>
       <Product>
         <Name>Some Product Name</Name>
         <Manufacturer>Shady Company Inc</Manufacturer>
       </Product>
       <Product>
         <Name>Some Product Name 2</Name>
         <Manufacturer>Another Company (TM)</Manufacturer>
       </Product>
      </Products>
    </Order>