EF中使用MySQL
来源:互联网 发布:深入浅出node.js 完整 编辑:程序博客网 时间:2024/05/17 23:24
1 配置连接字符串
<connectionStrings> <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=****;user id=root;password=****;" providerName="MySql.Data.MySqlClient" /></connectionStrings>
2 “Specified key was too long; max key length is 767 bytes”
出现这个错误的原因不明,暂时通过百度解决——给Context增加注解
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]public class MyContext : DbContext{ public MyContext() : base("name=MyContext")//web.config中connectionstring的名字 {} public DbSet<User> Users { get; set; }}
3 DBContext常用设置
public class PortalContext : DbContext { static PortalContext() { // 即使在Entity Framework Code First与数据库不匹配时,宁可Entity Framework Code First报出数据库连接错误,而不希望对数据库进行任何的删除创建操作。 // Entity Framework Code First提供关闭数据库初始化操作: Database.SetInitializer<PortalContext>(null); //Database.SetInitializer(new CreateDatabaseIfNotExists<PortalContext>()); //Database.SetInitializer(new DropCreateDatabaseAlways<PortalContext>()); //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>()); } public PortalContext() : base("name=PortalContext") { // 禁用延迟加载 this.Configuration.LazyLoadingEnabled = false; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 禁用默认表名复数形式 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); // 禁用一对多级联删除 modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); // 禁用多对多级联删除 modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); } }
4 属性约定
4.1 设置表信息
[Table("Product", Schema = "dbo")]public class Product
4.2 设置列信息
[Column("ProductID")]public int ProductID { get; set; }[MaxLength(100)][Required, Column("ProductName")]public string ProductName { get; set; }// 为属性指定对应的SQL SERVER数据类型:[Column("UnitPrice", TypeName = "MONEY")]public decimal UnitPrice { get; set; }[Column("Remark", TypeName = "text")]public string Remark { get; set; }
4.3 设置主键
// 自定义主键[Key][Column("ProductID")]public int ProductID { get; set; }[Key,MaxLength(36)]public string GUID { get; set; }[MaxLength(50)]public string UserName { get; set; }//默认string映射到mysql里是longtext类型的,加长度之后就变成varchar了[MaxLength(50)]public string PassWord { get; set; }// 取消和设置主键自增[Key][Column("ProductID")][DatabaseGenerated(DatabaseGeneratedOption.None)]public int ProductID { get; set; }[Key][Column("CategoryID")][DatabaseGenerated(DatabaseGeneratedOption.Identity)]public int CategoryID { get; set; }
4.3 数字类型长度及精度
在Product类中,UnitPrice表示单价,对于价格类的字段,我们通常会希望其保留2为小数。这时可以使用Fluent API进行设置,且Data Annotation不支持该设置。
protected override void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Entity<Product>().Property(t => t.UnitPrice) .HasColumnName("UnitPrice") .HasPrecision(18, 2);}
4.4 非数据库字段属性
[NotMapped]public string Remark { get; set; }
5 Fluent API配置Configuration映射类
在使用Fluent API进行Entity Framework Code First数据库映射时,除了以上的在重写OnModelCreating方法中直接对Entity进行配置之外,也可以对Configurations进行配置。这时可以先写一个单独的类,将数据表的全部映射要求都写在构造函数中。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel.DataAnnotations.Schema;using System.Data.Entity.ModelConfiguration;using Portal.Entities;namespace Portal.Mapping{ public class ProductMap : EntityTypeConfiguration<Product> { public ProductMap() { // Primary Key this.HasKey(t => t.ProductID); // Properties this.Property(t => t.ProductID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); this.Property(t => t.ProductName) .IsRequired() .HasMaxLength(100); // Table & Column Mappings this.ToTable("Product"); this.Property(t => t.ProductID).HasColumnName("ProductID"); this.Property(t => t.ProductName).HasColumnName("ProductName"); this.Property(t => t.UnitPrice) .HasColumnName("UnitPrice") .HasPrecision(18, 2); } }}
有了上面的映射类之后,在重写OnModelCreating方法中则可以直接调用映射类,从而减少了OnModelCreating方法的复杂度,同时也增强了代码维护的可读性。
protected override void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Configurations.Add(new ProductMap());}
0 0
- EF中使用MySQL
- EF,MySQL
- .net core mvc中使用ef
- .net core mvc中使用ef
- .net core mvc中使用ef
- C#学习-EF在三层中使用
- [EF在VS2010中应用Entity framework与MySQL
- [EF在VS2010中应用Entity framework与MySQL
- vs2013 ef,使用 MySQL来做数据库开发
- EF(EntityFramework)使用Code First连接MySQL数据库详解
- 【C#】32. 使用EF(EntityFramework)连接Mysql,MVC开发
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- EF连接mysql注意
- VS2013 EF连接MySql
- ef连接mysql 数据库
- EF连接MySql
- EF连接MySQL核心
- HDU2121-Ice_cream’s world II(不定根的最小树形图)
- slog远程调试
- Jetty 启动spring项目
- 115. Distinct Subsequences
- java.nio.Buffer详解
- EF中使用MySQL
- shell脚本编写
- iOS 简单的使用UIBezierPath绘制
- 基于深度学习框架Keras的CNN分类Mnist
- Linux 驱动开发-内核模块设计笔记 0
- AIM Tech Round 3 (Div. 2) E. Connecting Universities 【构造】
- 长期跑步给人带来的10个变化,真没想到!
- JSP EL表达式取URL里传来的值
- 计算机的存储模式