Entity Framework 数据库字段更改而实体不随即更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Entity Framework 数据库字段更改而实体不随即更新相关的知识,希望对你有一定的参考价值。

我用了从数据库更新模型=》 刷新, 也用了 从数据库更新模型=>添加
实体都没有变化! 报错!

错误 575 错误 11009: 未映射属性“DifficultyID”。 D:\TFEdu.AskAnswer\TFEdu.AskAnswer\AskAnswer.Models\AskAnswer.edmx 721 11 AskAnswer.Models

错误 576 正在运行转换: 指定的成员映射无效。类型“TFEdu.AskAnswerModel.AskQuestion”中的成员“SubjectCode”的类型“Edm.Int64[Nullable=True,DefaultValue=]”与类型“TFEdu.AskAnswerModel.Store.AskQuestion”中的成员“SubjectCode”的“SqlServer.char[Nullable=True,DefaultValue=,MaxLength=10,Unicode=False,FixedLength=True]”不兼容。 D:\TFEdu.AskAnswer\TFEdu.AskAnswer\AskAnswer.Models\AskAnswer.edmx 890 14

现在那个图中,右键点击你的错误的那个字段,选择删除,然后再从数据库更新模型即可。 参考技术A 在Data Model的设计器的空白处点击鼠标右键然后选择“验证”即可。本回答被提问者采纳

使用 Entity Framework 5 将特定 id 插入 MySQL 中的自动递增字段

【中文标题】使用 Entity Framework 5 将特定 id 插入 MySQL 中的自动递增字段【英文标题】:Insert a specific id into auto incremented field in MySQL with Entity Framework 5 【发布时间】:2015-03-09 08:51:31 【问题描述】:

这就是我的情况。

我有一个旧数据库,里面有很多,我的意思是很多数据。但是我最终创建了一个新的数据库结构,现在我想将数据从旧数据库移动到新数据库中。作为一名程序员,我不热衷于手动完成,这就是为什么我制作了一个程序来做到这一点。

现在我的问题是:向新数据库中添加新项目时,我无法设置它的 id,这对于旧数据库中存在的不同链接引用和一般外键引用至关重要。

因此,我的问题是:如何将 指定的 id 整数插入到我的 MySQL 数据库中具有 auto_increment 的字段中通过 Entity Framework 5C# 中首先使用数据库?

这是我用于新数据库的 MySQL 脚本:

    CREATE TABLE Profile
    (
        _id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
        UNIQUE KEY(_id),
        etc etc
    )

我的插入代码:

    public Profile Add(Profile item)
    
        if (item == null)
        
            throw new ArgumentNullException("item");
        

        db.Entry(item).State = EntityState.Added;
        db.SaveChanges();
        return item;
    

最后我想告诉大家,我知道这通常是不好的做法,但是数据库是空的,插入的 id 是自动生成的,并且是旧数据库中唯一的,这将确保不会发生重复

p>

【问题讨论】:

在添加新项目之前在您的表上设置“IDENTITY_INSERT ON”。 @aria 如果我没记错的话,从网上可以找到的内容,SET IDENTITY_INSERT Profile ONMSSQL 特定命令,不适用于 MySQL 我不熟悉 MySql,但我在某处读到 MySQL 允许您手动将值插入到 AUTO_INCREMENT 列中,这已经是允许的。 @aria:我读过同样的东西 ^^ 但是直到我改变了SET FOREIGN_KEY_CHECKS 所以接受你的回答吧! 【参考方案1】:

您必须关闭身份插入,插入记录,然后再打开身份插入

【讨论】:

从我在网上可以找到的 Identity_Insert 是一个 MSSQL 命令,不适用于 MySQL【参考方案2】:

我找到了在插入表格之前在哪里更改表格的解决方案。这基本上是其他人给出的解决方案,但是我需要转几圈。

这就是我所做的:

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE Profile DROP PRIMARY KEY,
MODIFY _id INT PRIMARY KEY NOT NULL;

insert commmand here....

ALTER TABLE Profile DROP PRIMARY KEY,
MODIFY _id INT AUTO_INCREMENT PRIMARY KEY NOT NULL;

SET FOREIGN_KEY_CHECKS=1;

【讨论】:

【参考方案3】:

除了使用Entity Framework 6,我也遇到了同样的问题,我就是这样解决的:

    进入您的实体模型 选择每个 auto_increment 字段并在属性中将 StoreGeneratedPattern 设置为 None

【讨论】:

以上是关于Entity Framework 数据库字段更改而实体不随即更新的主要内容,如果未能解决你的问题,请参考以下文章

在服务器中使用 Entity Framework 的 Migration 更新数据库

使用 Entity Framework 将相同的更改保存到多个数据库

Entity Framework Core 中的动态变化模式

Entity Framework怎么GroupBY多个字段

Entity Framework 4 和查询结果的缓存

使用Entity Framework Core管理数据库架构进行数据迁移