日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql ef_在EF中使用MySQL的方法及常见问题

發布時間:2024/9/19 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql ef_在EF中使用MySQL的方法及常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有時需要在網上租用空間或數據庫,Mysql成本低一些,所以想將sql server轉成mysql……

注意:在安裝Mysql時要選擇文字集為utf8,否則將不能使用中文(當前也可以在創建數據庫時使用utf8,不過我不知道在ef生成數據庫時如何設置,希望高手指點)

一、在項目中引用mysql的EF包

通過NuGet包管理器安裝:EntityFramework6.1.3、MySql.Data.Entity6.9.8

也可以用nuget的命令行加入:

Install-Package MySql.Data.Entity

二、新建相關類

1、新建 User 實體類

并定義實例的字段長度,不定義的話會出現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進行實現?[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如下:

最后,運行程序,完成數據庫自動創建

常見問題

出現錯誤提示:?Specified key was too long;max key length is 767 bytes

1)查看實體的字符串類型屬性是否設置了長度

2)MyContext?類中是否聲明為生成為mysql 數據類型的?[DbConfigurationType(typeof(MySqlEFConfiguration))]

出現錯誤提示:? ? Model compatibility cannot be checked because the database does not contain model metadata

刪除已生成的數據庫后重新運行程序

出現錯誤提示:序列不包含任何匹配元素

檢查一下:

例如: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; }

這個外鍵設置。

2.

[Column(TypeName="VARCHAR(254)")]

public string ColumnName { get; set; }

這樣的定義,改成:

[MaxLength(254)] [Column(TypeName="VARCHAR")]

public string ColumnName { get; set; }

3.(以下代碼未測試,因為我不是這樣用的,在下篇文章中將進行測試)

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()

總結

以上是生活随笔為你收集整理的mysql ef_在EF中使用MySQL的方法及常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。