mysql ef_在EF中使用MySQL的方法及常见问题
有時需要在網(wǎng)上租用空間或數(shù)據(jù)庫,Mysql成本低一些,所以想將sql server轉(zhuǎn)成mysql……
注意:在安裝Mysql時要選擇文字集為utf8,否則將不能使用中文(當(dāng)前也可以在創(chuàng)建數(shù)據(jù)庫時使用utf8,不過我不知道在ef生成數(shù)據(jù)庫時如何設(shè)置,希望高手指點)
一、在項目中引用mysql的EF包
通過NuGet包管理器安裝:EntityFramework6.1.3、MySql.Data.Entity6.9.8
也可以用nuget的命令行加入:
Install-Package MySql.Data.Entity
二、新建相關(guān)類
1、新建 User 實體類
并定義實例的字段長度,不定義的話會出現(xiàn)Specified key was too long;max key length is 767 bytes 的錯誤,這是因為string 類型直接映射到mysql 中的話是longtext,而mysql 支持最大長度為767 bytes.
public?class?User
{
public?int?Id?{?get;?set;?}
[StringLength(30)]
public?string?UserName?{?get;?set;?}
[MaxLength(30)]
public?string?PassWord?{?get;?set;?}
}
2、新建 MyContext 類
并說明用MySql進(jìn)行實現(xiàn)?[DbConfigurationType(typeof(MySqlEFConfiguration))]
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public?class?MyContext?:?DbContext
{
public?MyContext()
:?base("name=MyContext")//web.config中connectionstring的名字
{
}
public?DbSet?Users?{?get;?set;?}
}
3、寫測試代碼
Database.SetInitializer(new?DropCreateDatabaseIfModelChanges());
var?context?=?new?MyContext();
//插入一行值
context.Users.Add(new?User?{?UserName?=?"EF6MySQL"?});
context.SaveChanges();
三、配置Web.config
在中加入以下代碼:
完整的web.config如下:
最后,運(yùn)行程序,完成數(shù)據(jù)庫自動創(chuàng)建
常見問題
出現(xiàn)錯誤提示:?Specified key was too long;max key length is 767 bytes
1)查看實體的字符串類型屬性是否設(shè)置了長度
2)MyContext?類中是否聲明為生成為mysql 數(shù)據(jù)類型的?[DbConfigurationType(typeof(MySqlEFConfiguration))]
出現(xiàn)錯誤提示:? ? Model compatibility cannot be checked because the database does not contain model metadata
刪除已生成的數(shù)據(jù)庫后重新運(yùn)行程序
出現(xiàn)錯誤提示:序列不包含任何匹配元素
檢查一下:
例如:1.
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public string Name { get; set; }
[ForeignKey("ManagerId")]
public Employee Manager { get; set; }
public int ManagerId { get; set; }
}
[ForeignKey("ManagerId")]
public Employee Manager { get; set; }
public int ManagerId { get; set; }
這個外鍵設(shè)置。
2.
[Column(TypeName="VARCHAR(254)")]
public string ColumnName { get; set; }
這樣的定義,改成:
[MaxLength(254)] [Column(TypeName="VARCHAR")]
public string ColumnName { get; set; }
3.(以下代碼未測試,因為我不是這樣用的,在下篇文章中將進(jìn)行測試)
modelBuilder.Entity()
.HasKey(c => c.IdCategory )
.HasOptional(p => p.Children)
.WithMany()
.HasForeignKey(c => c.ChildrenId);
改成:
modelBuilder.Entity()
.HasKey(c => c.IdCategory )
.HasMany(p => p.Children)
.WithOptional()
.HasForeignKey(c => c.ChildrenId);
.WithMany()換成.WithOptional()
總結(jié)
以上是生活随笔為你收集整理的mysql ef_在EF中使用MySQL的方法及常见问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山东德州陵县义渡口河沟有野生小龙虾吗?
- 下一篇: 家常菜茄子的做法?