出于好奇,我开始尝试使用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不会将对象添加到数据库中?