文号
t79769
阅读
11800
回复
6
收藏
2
一个成功配置好的EntityFramework 您的项目引用了最新版实体框架,EntityFramework.Extensions Delete Update 发生一个或多个错误
2016/04/29
IP:江苏
无标题.png




请确保已经安装下列软件最新版
mysql-connector-net
mysql-for-visualstudio



如果你出现了上述问题
重新生成当前解决方案
如果还是有问题 请执行
Install-Package MySql.Data.Entity
Install-Package EntityFramework.Extended

如果还是有问题,请将为了entity在visual studio中安装的扩展 全部删掉然后执行
Install-Package EntityFramework
Install-Package MySql.Data.Entity
Install-Package EntityFramework.Extended

如果还是有问题 请新建一个全新工程
执行:
Install-Package EntityFramework
Install-Package MySql.Data.Entity
Install-Package EntityFramework.Extended

dll.png


app.config
<providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="mysqldbEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string="server=127.0.0.1;user id=root;password=jingru;persistsecurityinfo=True;database=mysqldb"" providerName="System.Data.EntityClient" />
    <add name="mysqldbEntities1" connectionString="metadata=res://*/TableModel.csdl|res://*/TableModel.ssdl|res://*/TableModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=127.0.0.1;user id=root;password=jingru;persistsecurityinfo=True;database=mysqldb"" providerName="System.Data.EntityClient" />
  </connectionStrings>


“TableDetails”中列“IsPrimaryKey”的值为DBNull.




Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:“表“TableDetails”中列“IsPrimaryKey”的值为DBNull.
解决方案:
Execute the following commands in MySQL.
   use <<database name>>; set global optimizer_switch='derived_merge=OFF';
如果还不能用 好像是表里的东西建错了 请仔细检查,我删掉了原来的表 重新建了个简单的表就好了




如果你没有Delete Update 这些扩展方法 请安装EntityFramework.Extended 执行: Install-Package EntityFramework.Extended


如果你的 EntityFramework.Extensions  Delete Update 发生一个或多个错误 听说原因是因为默认生成的是 mssql语句 mysql不支持
原帖:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
发生一个或多个错误.png

解决方法 :




public partial class CL1000Entities : DbContext
{
    public CL1000Entities()
        : base("name=CL1000Entities")
    {
            
    }
            
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema(""); //添加
        base.OnModelCreating(modelBuilder);//添加
    }
            
    public virtual DbSet<test> test { get; set; }
}
           
           
        static void Main()
        {
            EntityFramework.Container container = new EntityFramework.Container();//添加
            EntityFramework.Locator.RegisterDefaults(container);//添加
            container.Register<entityframework.batch.ibatchrunner>(() => new EntityFramework.Batch.MySqlBatchRunner());//添加
            EntityFramework.Locator.SetContainer(container);//添加
           
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }</entityframework.batch.ibatchrunner></test>


如果出现 基础提供程序在 Open 上失败。可能是你在新建模型的时候选择了 否,从链接字符串中排除敏感数据,我将在应用程序代码中设置此数据
设置方法 打开 app.config
<connectionstrings>
  <add name="CL1000Entities" connectionstring="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=" server="localhost;user" id="root;password=xxxx;persistsecurityinfo=True;database=CL1000""" providername="System.Data.EntityClient">
</add></connectionstrings>
在id后面输入 password=xxxx;
或者在你所建立的模型的构造函数中传入 密码


public CL1000Entities()            : base("name=CL1000Entities")        {            base.Database.Connection.ConnectionString = "server=localhost;user id=root;password=xxxxxxxx;persistsecurityinfo=True;database=CL1000";        }

更新条目时出错.有关信息请参阅内部异常
这个应该是 你手动修改过数据库字段的类型,需要手动更新你建立的模型文件 打开*.edmx ,空白区域右键->从数据库更新模型

也有可能是 有唯一属性的字段重复了



unable to load the specified metadata resource
[ 修改于10年7个月前 - 2016/05/01 15:42:33 ]
张静茹作者
10年7个月前IP:江苏
817946
1楼
历经坎坷,entity终于算是能用了,太不容易了,不是亲儿子 果然不省心!
引用
评论
张静茹作者
10年7个月前IP:江苏
818093
2楼
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        foreach (System.Data.Entity.Validation.DbEntityValidationResult Item in ex.EntityValidationErrors)
                        {
                            foreach (var ValidationErrorsItem in Item.ValidationErrors)
                            {
                                Console.WriteLine(string.Format("PropertyName = {0},ErrorMessage = {1}", ValidationErrorsItem.PropertyName, ValidationErrorsItem.ErrorMessage));
                            }
                        }
                    }
得到错误信息
引用
评论
张静茹作者
10年7个月前IP:江苏
819602
3楼
The XXXXXXX provider with invariant name 'MySql.Data.MySqlClient' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details.


需要安装MySql连接器mysql-connector-net-6.9.8 .msi
引用
评论
张静茹作者
10年5个月前IP:江苏
822091
4楼
No connection string named 'CL1000Entities' could be found in the application config file。
检查
xxxxx.exe.config
xxxxxx.exe.manifest
引用
评论
张静茹作者
10年5个月前IP:江苏
822126
5楼
总而言之,这东西 挺难用的,开发倒是容易一些,但是很容易出问题,而且效率低,优化难,老老实实用 sql脚本吧
引用
评论
10年5个月前IP:四川
822618
6楼
.NET连接数据库也就SQL Server比较好用了。。。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的