Entity Framework with MySQL 学习笔记一(常用小总结)

1-1 设置

   //DataAnnotation 1-1 | 1-0 table
    //SQLtable : member , columns : memberId, name
    //SQL basic logic : 1个table的PK, 是另一个table的PK and FK , 这就是1-1和1-0的关系
    [Table("member")]
    public class Member
    {
        [Key]
        public Int32 memberId { get; set; }
        public string name { get; set; }
        [Required]
        /*
            1-0,这里就不要Required
            1-1关系最好是放Required啦,在insert的时候才不会出错,但是...
            如果你写Required,那么你在做update的时候这个address不能是Null,也就是说一定要inner join出来先,不是很方便.
        */
        public virtual Address address { get; set; }
    }
    //SQLtable : address , columns : memberId, postcode, country
    [Table("address")]
    public class Address
    {
        /*
            关键就是这个关系连接, "member" 是 tableName
        */
        [Key, ForeignKey("member")]
        public Int32 addressId { get; set; } //这里取名addressId也行
        public string postcode { get; set; }
        public string country { get; set; }
        public virtual Member member { get; set; }
    }

基本的 CRUD

using (EFDB db = new EFDB())
{
    /*insert*/
    db.members.Add(new Member
    {
        name = "keatkeat",
        address = new Address
        {
            postcode = "81300",
            country = "malaysia"
        }
    });
    db.SaveChanges();

    /*select*/
    var members = db.members.Include(m => m.address).ToList(); //要include才会一起出来哦 

    /*update*/
    var member = db.members.Include(m => m.address).First().name = "xinyao123";
    db.SaveChanges();

    /*delete*/
    db.members.Remove(db.members.Include(m => m.address).First()); //要include出来才能一次删除2个table的数据!
    db.SaveChanges();
}

1-n 设置

    //1-n
    /*
        基本上如果没有必要就不要写required了,这样比较方便在update单个table的时候.(insert的时候自己要控制好!)
    */
    [Table("prod")]
    public class Prod
    {
        [Key]
        public Int32 prodId { get; set; }
        public string code { get; set; }
        public virtual ICollection<Color> colors { get; set; } //有多个colors,用ICollection | List 也可以
    }
    [Table("color")]
    public class Color
    {
        [Key]
        public Int32 colorId { get; set; }
        [ForeignKey("prod")] //指定一个FK
        public Int32 prodId { get; set; }
        public string color { get; set; }
        public virtual Prod prod { get; set; } //有一个prod
    }
时间: 2024-10-28 23:41:29

Entity Framework with MySQL 学习笔记一(常用小总结)的相关文章

Entity Framework with MySQL 学习笔记一(安装)

声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, 感恩. Entity Framework (缩写EF) 是微软的一个框架.作用是处理面向对象与关系数据库的映射问题. 以往我们都是ADO.NET来访问数据库,connection.open() -> sql command ->  executenonquery | dataReader ->

Entity Framework with MySQL 学习笔记一(查看EF和SQL记入)

做数据库的一向来都会很注意请求的次数还有语句.这关系到很多性能的问题. 因此在使用EF的时候如果不了解原理很可能会搞出很糟糕的请求. 所以呢,在还没有搞懂EF前最基本的是你得"看得见",EF为我们生成了什么样的 SQL语句,和访问了多少次SQL 其实有很多很好的工具可以实现这些东西,但是我懒的去找来试,所以呢找了一个简单又勉强可以用用的. 这个是微软本身的日志 参考 : http://msdn.microsoft.com/en-us/data/jj556606 -Logging Dat

Entity Framework with MySQL 学习笔记一(乐观并发)

在做项目时,通常我们对乐观并发有几种处理模式 1. 告诉用户此数据已被其他人捷足先登,更改了.你就算新一下重来吧. 2.直接把数据覆盖上去,我最大. 3.用被人的数据. 这里给出 code first 的做法 [Table("product")] [JsonObject(IsReference = true)] public class Product { [Key] public int id { get; set; } public string code { get; set;

Entity Framework with MySQL 学习笔记一(继承)

基本上sql中要表示继承关系有3中方式. 分别是,1表继承(TPH),2表继承(TPC),3表继承(TPT) 1表 : Person id type name classroom office 1 student  keat       1B null 2      teacher  xinyao    null  Lv2-T2 好处是不用 inner join 快,坏处是null 很多,浪费空间, column很长不好看. 2表: 这个很瞎不要学 .. , 大概就是没有父表,字表很多,但是每个

Entity Framework with MySQL 学习笔记一(查询)

参考 : http://msdn.microsoft.com/en-us/data/jj574232.aspx EF 查询基本上有3中 默认是 Lazy Loading 特色是只有在需要数据的时候EF才会像数据库请求,它不会使用任何inner join 比如我们有一个产品,有很多颜色,(1对多) 那么我们想把每个产品和颜色统统选出来 using (EFDB db = new EFDB()) { var prods = db.prods.ToList(); //像数据库请求prods, 但是不会包

Entity Framework with MySQL 学习笔记一(关系)

这一篇说说 EF Fluent API 和 DataAnnotations 参考 : http://msdn.microsoft.com/en-us/data/jj591617.aspx http://msdn.microsoft.com/en-us/data/jj591620.aspx

Entity Framework with MySQL 学习笔记一(insert,update,delete)

先说说 insert 吧. 当EF执行insert时,如果我们传入的对象是有关联(1对多等)的话,它会执行多个语句 insert到多个表, 并且再select出来填充我们的属性(因为有些column默认值是sql设定的,比如id等,我们insert后要有最新的数据丫). using (EFDB db = new EFDB()) { db.prods.Add(new Prod { code = "mk100", name = "name", detail = new

Entity Framework with MySQL 学习笔记一(复杂类型 Complex Types)

有时候我们希望在sql一个表里面的column, 一部分被分化成另一个class 典型的例子是 Address 直接看代码: [Table("member")] public class Member { [Key] public Int32 memberId { get; set; } public string name { get; set; } public virtual Address address { get; set; } } /* 不能公开 - public DbS

mysql学习笔记-数据库常用命令

数据库常用命令 1.添加需要路径:PATH="$PATH":/usr/local/mysql/bin 2.登陆数据库系统:mysql -h localhost -u root -p 3.创建数据库:CREATE DATABASE 数据库名 4.显示数据库:SHOW DATABASES; 5.删除数据库:DROP DATABASE 数据库名; 6.创建表:CREATE TABLE 表名(属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],属性名 数据类型); 注意