当我的模型中有视图时,从数据库中断更新模型

时间:2010-10-21 17:29:42

标签: c# entity-framework entity-framework-4

我的一个实体框架模型包含一个MS-SQL视图。视图称为用户,包含用户的各种属性。

当我右键单击模型并从数据库中选择更新模型时,我收到以下错误: “尝试从数据库更新时发生了'System.InvalidOperationException'类型的异常。异常消息是:'模型生成扩展对从数据库生成的模型进行了无效更改'。

这种情况发生在我们使用View in Entity Framework 4.0的任何模型中。每次数据库结构的某些部分发生变化时,删除并重新创建模型变得非常繁琐。无论如何,当我的模型包含视图时,“从数据库更新模型”是否有效?

如果它有所不同,这是一个只读视图。

编辑:我忘了提及,这是一个跨数据库视图。这似乎是问题发生的地方。常规视图(在同一个数据库中)可以正常工作。

这是我的示例EDMX文件。我不确定它是否有用。

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Runtime>
<edmx:StorageModels>
  <Schema Namespace="SignupsModel.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="SignupsModelStoreContainer">
      <EntitySet Name="Users" EntityType="SignupsModel.Store.Users" store:Type="Views" Schema="dbo">

      </EntitySet>
    </EntityContainer>
        <EntityType Name="Users">
      <Key>
        <PropertyRef Name="userID" />
      </Key>
      <Property Name="userID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="userName" Type="varchar" Nullable="false" MaxLength="50" />
      <Property Name="campusID" Type="varchar" Nullable="false" MaxLength="7" />
      <Property Name="firstName" Type="varchar" Nullable="false" MaxLength="30" />
      <Property Name="middleInitial" Type="varchar" Nullable="false" MaxLength="1" />
      <Property Name="lastName" Type="varchar" Nullable="false" MaxLength="30" />
    </EntityType>
  </Schema>
</edmx:StorageModels>
<edmx:ConceptualModels>
  <Schema Namespace="SignupsModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
    <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="true">
      <EntitySet Name="Users" EntityType="SignupsModel.User" />
    </EntityContainer>
    <EntityType Name="User">
      <Key>
        <PropertyRef Name="userID" />
      </Key>
      <Property Name="userID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
      <Property Name="userName" Type="String" Nullable="false" MaxLength="50" Unicode="false" FixedLength="false" />
      <Property Name="campusID" Type="String" Nullable="false" MaxLength="7" Unicode="false" FixedLength="false" />
      <Property Name="firstName" Type="String" Nullable="false" MaxLength="30" Unicode="false" FixedLength="false" />
      <Property Name="middleInitial" Type="String" Nullable="false" MaxLength="1" Unicode="false" FixedLength="false" />
      <Property Name="lastName" Type="String" Nullable="false" MaxLength="30" Unicode="false" FixedLength="false" />
    </EntityType>
  </Schema>
</edmx:ConceptualModels>
<edmx:Mappings>
  <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
    <EntityContainerMapping StorageEntityContainer="SignupsModelStoreContainer" CdmEntityContainer="Entities">
      <EntitySetMapping Name="Users"><EntityTypeMapping TypeName="SignupsModel.User"><MappingFragment StoreEntitySet="Users">
        <ScalarProperty Name="userID" ColumnName="userID" />
        <ScalarProperty Name="userName" ColumnName="userName" />
        <ScalarProperty Name="campusID" ColumnName="campusID" />
        <ScalarProperty Name="firstName" ColumnName="firstName" />
        <ScalarProperty Name="middleInitial" ColumnName="middleInitial" />
        <ScalarProperty Name="lastName" ColumnName="lastName" />
      </MappingFragment></EntityTypeMapping></EntitySetMapping>
    </EntityContainerMapping>
  </Mapping>
</edmx:Mappings>

                                                                                                                                 

1 个答案:

答案 0 :(得分:1)

我想我已经找到了这个问题。前段时间,我想我安装了一个名为“Edmx Views Processor”的Visual Studio插件。我以为我卸载了它。删除插件似乎解决了这个问题。

有问题的扩展程序位于: http://visualstudiogallery.msdn.microsoft.com/en-us/d9b76b5d-d45c-4e79-8d28-31444be582de