日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/9/19 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的方法及常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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