EF CodeFirst 入门 for oracle
创建单表插入
1.安装
设定DB连接
<connectionStrings> <add name="connstr" providerName="Oracle.ManagedDataAccess.Client" connectionString="Password=XXX;User ID=XXXX;Data Source=//10.1.1.1:1521/XXXX;" /> </connectionStrings>
2.创建实体类
public class STUDENT { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int STUDENTID { get; set; } public string STUDENTNAME { get; set; } public DateTime? DATEOFBIRTH { get; set; } public string PHOTO { get; set; } public float HEIGHT { get; set; } public float WEIGHT { get; set; } }
3.实现DBContext
using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; using System.Linq; using System.Text; using System.Threading.Tasks; using Oracle.ManagedDataAccess.EntityFramework; namespace EFDemo { public class SchoolContext:DbContext { public SchoolContext():base("name=connstr") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("FPCSFCDATA");//指定默认用户 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); // 映射的表移除复数,去除 s //如果这个不加,那么保存数据的时候会在类名后面加小写的s,然后在数据库生成这个表
} public DbSet<STUDENT> Students { get; set; } } }
4.添加数据
STUDENT stu = new STUDENT() { STUDENTID = 3, STUDENTNAME = "李四", HEIGHT = 180.5F, WEIGHT = 140.5F, DATEOFBIRTH = DateTime.Now, PHOTO = "987654321"};
dc.Students.Add(stu);
dc.SaveChanges();
MessageBox.Show("创建成功");
推荐这些文章:
问题
今天做了一个实验
public class Class1 { public string ID { get; set; } public List<string> List { get; set; } }
然后用ef生成数据库的时候发现只生成只有ID一个字段的Class1表,那么存的时候List存不存呢?
为什么只生成一个表,而不生成两个表呢?我的目的是ID,List都能存到,怎么改呢??
最佳回答
可以序列化存储,
...
select t.COLUMN_NAME, Decode(t.DATA_TYPE,'NUMBER',DATA_TYPE||'('||DATA_LENGTH||','||DATA_PRECISION||')',DATA_TYPE||'('||DATA_LENGTH||')') DATA_TYPE, t.NULLABLE, t.COLUMN_ID, c.COMMENTS from user_tab_columns t, user_col_comments c where t.table_name = c.table_name and t.co...
举个栗子,字段config_list中的值为[1001,1002,1003,1004]
现在我需要把1002替换成1005,或者干脆把1002去掉
可以用replace
语法
UPDATE table_name SET field_name = REPLACE(field_name, 'from_str', 'to_str') WHERE field_name LIKE '%from_str%';
例子
update config set config_list=replace(config_list, '1002', '1005') where config_list like '%1...
废话不说,直接开始:
Nuget引用Microsoft.EntityFrameWorkCore。
实现自己的表(并不限于基础类,可以有自己的构造方法,方法,访问器等,以及神奇的[NotMapped] Attribute来标识这个属性不用翻译成数据库表字段)。
举例说明(相对复杂一点):
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
...
在项目上遇到了需要按照数据长度来排序查询的问题小记
/* order by 排序,desc降序,asc升序*/select * from table t order by LENGTH(t.name) desc;
select * from table t order by nvl(length(trim(t.name)),0) desc;
select * from table t order by length(trim(t.name)) desc;
...
https://www.cnblogs.com/zhusk/p/10972546.html
指定类外键有注释(DataAnnotation)和FluentAPI两种方式,下面我们主要使用DataAnnotation指定外键关系 第一种方式
//1-指定导航属性,会自动生成外键,命名规则为:“对象名称_主键名”
public class TUsers
{
[Key]
public int UserId { get; set; }
public string Account { get; set; }
...
问题
之前一直是先建立数据库再去生成模型,在虚拟主机中部署是没有问题的,想试试用CodeFirst的方式做,但比较担心到时候无法部署到普通的虚拟主机上面去。
比如阿里云的,平台是直接分配了一个数据库帐号和一个同名的数据库,但这个帐号和数据库肯定都没有办法去删除或者重建什么的,那部署的时候应该如何部署呢?当需要改动数据库的时候又该怎么弄?
最佳回答
数据库名称肯定是改不了的了,里面的表你可以用codefirst来生成,当然也可以修改
...
使用工具:vs2019
①选择asp.net Core WebApi项目
②框架vs2019最高支持net5
③新建一个net5的类库并创建一个EFCore上下文对象类
④通过nutget包管理器安装如下两个包
一个是EFCore的,一个是用于将领域模型的实体映射到数据库中的。
注意,因为这个webapi项目是net5.0的,所以这两个包最好选低版本的安装,比如5.0,否则会不兼容
⑤在Models里设计好表
字段的限制可以在上下文对象里限制,这样逻辑比较清晰。
public class User
{
public int Id { get; se...
继续配置实体之间的第三种关系,即一对一的关系。
以考研报名为例,一个人有唯一的身份证号,在首次报名时会生成一个唯一的考试号,这样身份证号和考试号就是一对一的关系。
同样提供ER图如下:
Person类:
public class Person
{
public string PersonIdentityNum { get; set; }
public string PersonName { get; set; }
public virtual Exam Exam { get; set; }
}
Exam类:
public class Exam
{
pub...
接上篇博客,继续演示Fluent API配置一对多的关系。
以班级-学生为例,一个班级有多个学生,一个学生属于一个班级。
ER图如下:
同样的,我们需要准备好如上实体类。
班级类:
public class Class
{
public int ClassId { get; set; }
public string ClassName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
学生类:
public class Student
{
pu...
文章链接:https://www.dianjilingqu.com/891.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。