实体框架不会将对象添加到数据库中

时间:2015-10-08 14:22:57

标签: c# mysql database entity-framework

出于好奇,我开始尝试使用Entity Framework并设法让大部分工作正常。现在问题出在这里:

我正在使用代码优先方法将简单对象保存到MySQL数据库。到目前为止的代码如下。

的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <entityFramework>
    <defaultConnectionFactory 
      type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"/>
    <providers>
      <provider 
        invariantName="MySql.Data.MySqlClient" 
        type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/>
      <provider 
        invariantName="System.Data.SqlClient" 
        type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>
<system.data>
  <DbProviderFactories>
    <add name="MySQL Data Provider"
         invariant="MySql.Data.MySqlClient"
         description=".Net Framework Data Provider for MySQL"
         type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
  </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add 
      name="LoginCon" 
      providerName="MySql.Data.MySqlClient"
      connectionString="connectionString="server=localhost;
                                          port=3306;
                                          database=test;
                                          uid=root;"/>
  </connectionStrings>
</configuration>

模型类

public class LoginData {
        [Key]
        public int userId { get; set; }
        public string password { get; set; }
}

数据库上下文类

public class LoginCon : DbContext {
    public DbSet<LoginData> Logins { get; set; }
}

当我执行

之类的事情时
LoginData data = context.Logins.First(x => x.userId == 123);

context.Logins.Count();

我得到了正确的输出。但是当我做的时候

LoginData log = new LoginData { userId= 321, password = "abc" };
context.Logins.Add(log);

我得到了一个输出

EntityType 'Login' has no key defined. Define the key for this EntityType.
Logins: EntityType: EntitySet 'Logins' is based on type 'Login' that has no keys defined.

并且该对象根本没有添加到数据库中。我在数据库中定义了一个主键

数据库结构

CREATE TABLE `login` (
 `userId` int(4) NOT NULL,
 `password` varchar(50) NOT NULL,
 PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我知道从数据库生成模型更容易,但我学到了很多东西。那么我做错了什么?为什么Entity Framework不会将对象添加到数据库中?

0 个答案:

没有答案