首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使实体框架知道表/列名称

使实体框架知道表/列名称
EN

Stack Overflow用户
提问于 2018-04-25 00:16:02
回答 1查看 227关注 0票数 1

在重命名表或列时,如何确保edmx的“数据库更新模型”识别新的表结构?

MyTable只有2列。

代码语言:javascript
运行
AI代码解释
复制
ID
name

重构->重命名(Ctrl R+ R)

代码语言:javascript
运行
AI代码解释
复制
myTableID
fullName

下面哪个是相应的edmx更改的“右”,因此应用程序在没有运行时/编译错误的情况下工作。

  1. 重构->在Edmx文件上重命名或
  2. 右键单击->从数据库中更新模型、删除旧项或
  3. 手动创建、删除和验证edmx

正如您所看到的,这是一个非常简单的重命名。

编译错误

运行时错误: EFControl _current Error CS0103:名称'_current‘在当前上下文中不存在

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-25 01:56:19

更新:重命名列--我看到您的问题已经改变了,因为您问的是重命名列,所以我正在更新我的答案。让我们按照您的新示例,通过T创建您的表:

代码语言:javascript
运行
AI代码解释
复制
CREATE TABLE [dbo].MyTable
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [name] NCHAR(10) NULL
)

实体框架(EF)将为您创建MyTable.cs文件:

代码语言:javascript
运行
AI代码解释
复制
public partial class MyTable
{
    public int Id { get; set; }
    public string name { get; set; }
}

这是EDMX的主要部分:

代码语言:javascript
运行
AI代码解释
复制
<edmx:ConceptualModels>
  <Schema Namespace="database1Model" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
    <EntityContainer Name="database1Entities" annotation:LazyLoadingEnabled="true" >
      <EntitySet Name="MyTables" EntityType="database1Model.MyTable" />
    </EntityContainer>
    <EntityType Name="MyTable">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Name="Id" Type="Int32" Nullable="false" />
      <Property Name="name" Type="String" MaxLength="10" FixedLength="true" Unicode="true" />
    </EntityType>
  </Schema>
</edmx:ConceptualModels>

然后使用重命名列,这将生成Visual (我没有在MyTable中插入任何数据):

代码语言:javascript
运行
AI代码解释
复制
CREATE TABLE [dbo].[MyTable] (
    [myTableID]   INT        NOT NULL,
    [fullName] NCHAR (10) NULL,
    PRIMARY KEY CLUSTERED ([myTableID] ASC)
);

此时,如果您从数据库中更新您的EDMX,您将得到以下内容:

因此,如果您打开您的EDMX文件并删除后面跟着<!-- REMOVE --->的三个元素,如下所示:

代码语言:javascript
运行
AI代码解释
复制
<edmx:ConceptualModels>
  <Schema Namespace="database1Model" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
    <EntityContainer Name="database1Entities" annotation:LazyLoadingEnabled="true" >
      <EntitySet Name="MyTables" EntityType="database1Model.MyTable" />
    </EntityContainer>
    <EntityType Name="MyTable">
      <Key>
        <PropertyRef Name="Id" /><!-- REMOVE -->
        <PropertyRef Name="myTableID" />
      </Key>
      <Property Name="Id" Type="Int32" Nullable="false" /><!-- REMOVE -->
      <Property Name="name" Type="String" MaxLength="10" FixedLength="true" Unicode="true" /><!-- REMOVE -->
      <Property Name="myTableID" Type="Int32" Nullable="false" />
      <Property Name="fullName" Type="String" MaxLength="10" FixedLength="true" Unicode="true" />
    </EntityType>
  </Schema>
</edmx:ConceptualModels>

从你的模型中得到更新,你就可以走了。即使是自动生成的文件MyTable.cs也将使用以下新名称进行更新:

代码语言:javascript
运行
AI代码解释
复制
public partial class MyTable
{
    public int myTableID { get; set; }
    public string fullName { get; set; }
}

回答了最初的问题:重命名表的一种方法是编辑.EDMX文件、为您创建的实体框架以及它存储有关将数据库映射到对象的所有信息。这个文件可以在项目的根文件夹(即.csproj文件所在的位置)中找到,它只是一个可以用文本编辑器打开的XML。

  1. 在VisualStudio之外,例如PsPad,NotePad++等。
  2. 或者在Visual中右键单击它,选择"Open .“并选择"XML (文本)编辑器“。

我猜您的Foo类对应于Foo表;后者现在可能是FooNew或类似的东西。

要重命名表,但保留Foo类,只需查找EDMX文件的这一部分:

代码语言:javascript
运行
AI代码解释
复制
<!-- SSDL content -->
<edmx:StorageModels>
...
    <EntitySet Name="Foo" ... Schema="dbo" ... />
...
</edmx:StorageModels>

EntitySet中添加Table="FooNew" as属性,如对question的答复所建议的那样

代码语言:javascript
运行
AI代码解释
复制
<EntitySet Name="Foo" ... Schema="dbo" ... Table="FooNew" />

此时,关闭并保存;重新打开edmx,双击它,然后像前面那样“从数据库更新模型”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50017245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档