您好我正在尝试使用实体框架'CodeFirst'将Winql Db(空)与WinForm连接,但我有第一个问题1.Can EntityFramework'CodeFirst'在Mysql数据库中创建表和列?如果EF可以像我想的那样这样做,那么当我尝试在表中添加记录时,为什么会显示此异常 . 这是守则
使用:
-
EF v6
-
MySqlConnector v6.7.4.0
-
.NET 4.0 Framework
-
VS2012
App.config中
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity">
</defaultConnectionFactory>
</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.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="ConnectionStringName" connectionString="server=localhost;Database=auth;uid=root;pwd=1234;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
MySqlContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Unify.RoleCreator
{
public class MySqlContext : System.Data.Entity.DbContext
{
public System.Data.Entity.DbSet<LoginModel> LoginModel { get; set; }
public System.Data.Entity.DbSet<Roles> Roles { get; set; }
public MySqlContext(string connString)
: base(connString)
{ }
}
}
并且 Here is where the exception displays
在此行 db.LoginModel.Add(user);
Program.cs
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unify.RoleCreator;
using System.Configuration;
namespace RoleCreatorv3
{
static class Program
{
[STAThread]
static void Main()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MySqlContext>());
var connString = ConfigurationManager.ConnectionStrings["ConnectionStringName"].ToString();
using (var db = new MySqlContext(connString))
{
var user = new LoginModel { User = "admin", Pass= 123 };
db.LoginModel.Add(user);
db.SaveChanges();
}
Console.WriteLine("All ok!");
Console.Read();
}
}
}
和参考文献..
1 回答
不要将实际的连接字符串传递到上下文中,只需将web.config中连接字符串元素的name属性传递给上下文的基本DbContext .
然后你可以正常使用:
编辑:我没有使用MySql所以如果这是错误请纠正我 . 您没有在web.config的EntityFramework部分中指定提供程序 . 我做了一个快速搜索,发现这个mysql的web.config:
I found that web.config here
将提供程序添加到web.config并告诉我你得到了什么 .
I found something interesting here