代码之家  ›  专栏  ›  技术社区  ›  choudeshell

可以在外部XML中放置一个定义查询(实体框架)吗?

  •  1
  • choudeshell  · 技术社区  · 16 年前

    例如,在model.edmx文件中,我有:

            <Schema Namespace="dbModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
      <EntityContainer Name="dbModelStoreContainer">
        <EntitySet Name="Students" EntityType="dbModel.Store.Students" store:Type="Tables" Schema="dbo" />
        <EntitySet Name="Teachers" EntityType="dbModel.Store.Teachers" store:Type="Tables" Schema="dbo" />
      </EntityContainer>
      <EntityType Name="Students">
        <Key>
          <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
        <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
        <Property Name="TeacherId" Type="int" Nullable="false" />
      </EntityType>
      <EntityType Name="Teachers">
        <Key>
          <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
        <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
      </EntityType>
      <Function Name="ListAllStudents" IsComposable="false">
      <CommandText>
        select * from student
        WHERE teacherid = @id;
      </CommandText>
      <Parameter Name="id"
                 Mode="In"
                 Type="int"/>
    </Function>
    
    </Schema>
    

    是否有可能

    <Function Name="ListAllStudents" IsComposable="false">
      <CommandText>
        select * from student
        WHERE teacherid = @id;
      </CommandText>
      <Parameter Name="id"
                 Mode="In"
                 Type="int"/>
    </Function>
    

    住在model.edmx之外并参考它?我想做的本质上类似于将不同的web.config节分解成它们自己的XML文件。我不想让EDMX文件对于一个项目来说太大,因为我将有很多定义好的查询。

    **edit:code first实际上不是一个可靠的选项,因为我将使用已经定义的(遗留)数据库。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Steve Michelotti    16 年前

    我不知道有什么直接的方法来做你想要的。然而,您可能会考虑一些替代方案:首先,通常没有理由将所有内容都放在一个单一的单块EDMX文件中。查找可以使用多个EDMX文件对应用程序的各个方面进行“逻辑分组”的区域。通常,这是一个很好的方法来打破事物。

    此外,如果您使用的是最新版本的ef(ef4),请看一下“代码优先”方法。这就引入了一个有趣的“关注点分离”,即您有专门针对如何将实体映射到模型的映射类,这些类都被分解为各自的类,这样您就不会最终得到一个单一的映射文件。实际上,它只是C类的集合。