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

时间:2010-08-25 02:28:15

标签: c# entity-framework

例如,在我的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文件对于一个项目来说很大,因为我会有很多定义的查询。

**编辑:Code First不是真正的责任选项,因为我将使用已经定义的(遗留)数据库。

1 个答案:

答案 0 :(得分:2)

我不知道有什么直接的方式去做你正在寻找的东西。但是,您可能会考虑几种替代方案:首先,通常没有理由将所有内容放在单个整体edmx文件中。查找可以使用多个edmx文件来“逻辑分组”应用程序各个方面的区域。通常这是将事情分开的好方法。

此外,如果您使用的是最新版本的EF(EF4),请查看“代码优先”方法。这引入了一个有趣的“关注点分离”,其中您有专门用于将实体映射到模型的映射类,并且这些映射类都被分解为它们自己的类,因此您不会最终得到单片映射文件。实际上,它只是C#类的集合。