Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle

使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了。之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不太完美,有消息称Oracle官方的EF版本可能要到第三季度出了,还需要静静等待几个月的时间。

  既然有了Beta版本的驱动,在git上看到有人实现了MySQL非官方的EF版本。于是决定自己动手实现一套EF Oracle版本,方便项目使用。经测试后已能正常使用,已上传到Nuget,github上和大家共享。

Nuget引用地址

  项目基于Oracle.ManagedDataAccess.Core官方Beta版本驱动,Nuget上搜索Citms.EntityFrameworkCore.Oracle即可找到包。

  Oracle EF Core NuGet 地址:

  https://www.nuget.org/packages/Citms.EntityFrameworkCore.Oracle

  命令安装:Install-Package Citms.EntityFrameworkCore.Oracle

 

项目使用演示

  1.新建一个.NET Core控制台应用程序 NETCoreOracle

  2.添加包引用

Install-Package Citms.EntityFrameworkCore.Oracle
Install-Package Microsoft.Extensions.Logging.Console

  3.Oracle增删查改

 测试所用SQL脚本

---------------------------部门表--------------------------------

declare  tableExist number;

begin

    select count(1) into tableExist from user_tables where upper(table_name)=upper('SYS_DEPARTMENT') ;

    if tableExist = 0  then

        execute immediate '

            CREATE TABLE SYS_DEPARTMENT(

                DEPARTMENTID VARCHAR2(32) DEFAULT sys_guid()   NOT NULL  ,

                BUNAME NVARCHAR2(50)   ,

                BUFULLNAME NVARCHAR2(100)   ,

                BUCODE NVARCHAR2(50)   ,

                HIERARCHYCODE NVARCHAR2(500)   ,

                PARENTGUID VARCHAR2(32)   ,

                WEBSITE NVARCHAR2(50)   ,

                FAX NVARCHAR2(20)   ,

                COMPANYADDR NVARCHAR2(100)   ,

                CHARTER NVARCHAR2(50)   ,

                CORPORATIONDEPUTY NVARCHAR2(20)   ,

                CREATEDON DATE   ,

                MODIFIEDON DATE   ,

                CREATEDBY VARCHAR2(32)   ,

                COMMENTS NVARCHAR2(500)   ,

                MODIFIEDBY VARCHAR2(32)   ,

                ISENDCOMPANY NUMBER(1,0) DEFAULT 0   ,

                ISCOMPANY NUMBER(1,0) DEFAULT 0   ,

                BULEVEL INTEGER DEFAULT 0   ,

                BUTYPE NUMBER(3,0) DEFAULT 0   ,

                ORDERCODE NVARCHAR2(20)   ,

                ORDERHIERARCHYCODE NVARCHAR2(500)   ,

                AREACODE VARCHAR2(10)   ,

                SIMPLECODE NVARCHAR2(50)   

                    )

    ';


        execute immediate 'comment ON TABLE  SYS_DEPARTMENT IS ''组织机构表''';


        execute immediate 'comment on column SYS_DEPARTMENT.DEPARTMENTID is ''单位GUID''';

        execute immediate 'comment on column SYS_DEPARTMENT.BUNAME is ''单位简称''';

        execute immediate 'comment on column SYS_DEPARTMENT.BUFULLNAME is ''单位全称''';

        execute immediate 'comment on column SYS_DEPARTMENT.BUCODE is ''单位代码''';

        execute immediate 'comment on column SYS_DEPARTMENT.HIERARCHYCODE is ''层级代码''';

        execute immediate 'comment on column SYS_DEPARTMENT.PARENTGUID is ''父级GUID''';

        execute immediate 'comment on column SYS_DEPARTMENT.WEBSITE is ''网址''';

        execute immediate 'comment on column SYS_DEPARTMENT.FAX is ''传真''';

        execute immediate 'comment on column SYS_DEPARTMENT.COMPANYADDR is ''公司地址''';

        execute immediate 'comment on column SYS_DEPARTMENT.CHARTER is ''营业执照''';

        execute immediate 'comment on column SYS_DEPARTMENT.CORPORATIONDEPUTY is ''法人代表''';

        execute immediate 'comment on column SYS_DEPARTMENT.CREATEDON is ''创建时间''';

        execute immediate 'comment on column SYS_DEPARTMENT.MODIFIEDON is ''修改时间''';

        execute immediate 'comment on column SYS_DEPARTMENT.CREATEDBY is ''创建人''';

        execute immediate 'comment on column SYS_DEPARTMENT.COMMENTS is ''说明''';

        execute immediate 'comment on column SYS_DEPARTMENT.MODIFIEDBY is ''修改人''';

        execute immediate 'comment on column SYS_DEPARTMENT.ISENDCOMPANY is ''是否末级公司''';

        execute immediate 'comment on column SYS_DEPARTMENT.ISCOMPANY is ''是否公司''';

        execute immediate 'comment on column SYS_DEPARTMENT.BULEVEL is ''层级数''';

        execute immediate 'comment on column SYS_DEPARTMENT.BUTYPE is ''组织类型''';

        execute immediate 'comment on column SYS_DEPARTMENT.ORDERCODE is ''排序代码''';

        execute immediate 'comment on column SYS_DEPARTMENT.ORDERHIERARCHYCODE is ''排序层级代码''';

        execute immediate 'comment on column SYS_DEPARTMENT.AREACODE is ''单位所属区域编码''';

        execute immediate 'comment on column SYS_DEPARTMENT.SIMPLECODE is ''单位简码''';

        

    end if;

end;

---------------------------点位表--------------------------------

declare  tableExist number;

begin

    select count(1) into tableExist from user_tables where upper(table_name)=upper('COMMON_SPOTTING') ;

    if tableExist = 0  then

        execute immediate '

            CREATE TABLE COMMON_SPOTTING(

                SPOTTINGID VARCHAR2(50)  NOT NULL  ,

                SPOTTINGNO VARCHAR2(50)  NOT NULL  ,

                SPOTTINGNAME NVARCHAR2(100)  NOT NULL  ,

                UNIQUECODE VARCHAR2(50)   ,

                ROADID VARCHAR2(50)   ,

                LONGITUDE NUMBER(12,8)   ,

                LATITUDE NUMBER(12,8)   ,

                DEPARTMENTID VARCHAR2(50)  NOT NULL  ,

                SOURCEKIND VARCHAR2(50) DEFAULT ''local''   NOT NULL  ,

                CREATOR VARCHAR2(50)  NOT NULL  ,

                CREATEDTIME DATE DEFAULT sysdate   NOT NULL  ,

                MODIFIER VARCHAR2(50)   ,

                MODIFIEDTIME DATE   ,

                FLAGS VARCHAR2(10)   ,

                REMARK NVARCHAR2(500)   ,

                APPLICATIONNAME VARCHAR2(50) DEFAULT ''Citms.PIS''   NOT NULL  ,

                AREACODE VARCHAR2(50)   ,

                BOPOMOFO VARCHAR2(200)   ,

                SPOTTINGTYPE VARCHAR2(50)   ,

                VIRTUALDELETEFLAG INTEGER DEFAULT 0   ,

                DISABLED NUMBER(1,0) DEFAULT 0   ,

                PUNISHDEPARTMENT VARCHAR2(50)   ,

                DIVISIONCODE VARCHAR2(50)   ,

                APPROVESTATUS INTEGER DEFAULT 0   ,

                APPROVEUSERID VARCHAR2(50)   ,

                APPROVETIME DATE   ,

                APPROVEINFO NVARCHAR2(200)   ,

                MAXWEIGHT NUMBER(12,4)   ,

                MAXHEIGHT NUMBER(12,4)   ,

        PRIMARY KEY(SPOTTINGID) 

            )

    ';


        execute immediate 'comment ON TABLE  COMMON_SPOTTING IS ''道路点位表''';


        execute immediate 'comment on column COMMON_SPOTTING.SPOTTINGID is ''点位ID''';

        execute immediate 'comment on column COMMON_SPOTTING.SPOTTINGNO is ''点位编号(可以为厂家分配的点位编号)''';

        execute immediate 'comment on column COMMON_SPOTTING.SPOTTINGNAME is ''点位名称''';

        execute immediate 'comment on column COMMON_SPOTTING.UNIQUECODE is ''上传六合一标准代码''';

        execute immediate 'comment on column COMMON_SPOTTING.ROADID is ''所在道路ID''';

        execute immediate 'comment on column COMMON_SPOTTING.LONGITUDE is ''经度坐标值''';

        execute immediate 'comment on column COMMON_SPOTTING.LATITUDE is ''纬度坐标值''';

        execute immediate 'comment on column COMMON_SPOTTING.DEPARTMENTID is ''所在管理部门''';

        execute immediate 'comment on column COMMON_SPOTTING.SOURCEKIND is ''来源类型''';

        execute immediate 'comment on column COMMON_SPOTTING.CREATOR is ''创建用户ID''';

        execute immediate 'comment on column COMMON_SPOTTING.CREATEDTIME is ''创建时间''';

        execute immediate 'comment on column COMMON_SPOTTING.MODIFIER is ''修改人''';

        execute immediate 'comment on column COMMON_SPOTTING.MODIFIEDTIME is ''修改时间''';

        execute immediate 'comment on column COMMON_SPOTTING.FLAGS is ''保留标记''';

        execute immediate 'comment on column COMMON_SPOTTING.REMARK is ''备注''';

        execute immediate 'comment on column COMMON_SPOTTING.APPLICATIONNAME is ''应用名称''';

        execute immediate 'comment on column COMMON_SPOTTING.AREACODE is ''所属辖区代码''';

        execute immediate 'comment on column COMMON_SPOTTING.BOPOMOFO is ''拼音简称''';

        execute immediate 'comment on column COMMON_SPOTTING.SPOTTINGTYPE is ''点位类型(字典表字典 ,Kind 为 1003 , 十字路口/丁字路口/圆形转盘/其它)''';

        execute immediate 'comment on column COMMON_SPOTTING.VIRTUALDELETEFLAG is ''逻辑删除标记(0 正常数据, 1 逻辑删除)''';

        execute immediate 'comment on column COMMON_SPOTTING.DISABLED is ''是否停用(0 未停用, 1 停用),默认为0''';

        execute immediate 'comment on column COMMON_SPOTTING.PUNISHDEPARTMENT is ''处理单位''';

        execute immediate 'comment on column COMMON_SPOTTING.DIVISIONCODE is ''行政区划代码''';

        execute immediate 'comment on column COMMON_SPOTTING.APPROVESTATUS is ''审核状态(0:未审核, 1:审核通过, 2:审核未通过), 默认为未审核状态''';

        execute immediate 'comment on column COMMON_SPOTTING.APPROVEUSERID is ''审核用户代码''';

        execute immediate 'comment on column COMMON_SPOTTING.APPROVETIME is ''审核时间''';

        execute immediate 'comment on column COMMON_SPOTTING.APPROVEINFO is ''审核说明''';

        execute immediate 'comment on column COMMON_SPOTTING.MAXWEIGHT is ''最大限重(KG)''';

        execute immediate 'comment on column COMMON_SPOTTING.MAXHEIGHT is ''最大限高(m)''';

        

    end if;

end;

4.新建相关实体

///<summary>

    ///组织机构表

    ///</summary>

    [Table("SYS_DEPARTMENT")]

    public class  Department

    {

    ///<summary>

        ///单位GUID 

        ///</summary> 

        [Key,Column("DEPARTMENTID", TypeName = "VARCHAR2")]

        public string DepartmentId { get; set; }

          

        ///<summary>

        ///单位简称 

        ///</summary> 

        [Column("BUNAME")]

        public string BuName { get; set; }

          

        ///<summary>

        ///单位全称 

        ///</summary> 

        [Column("BUFULLNAME")]

        public string BuFullName { get; set; }

          

        ///<summary>

        ///单位代码 

        ///</summary> 

        [Column("BUCODE")]

        public string BuCode { get; set; }

          

        ///<summary>

        ///层级代码 

        ///</summary> 

        [Column("HIERARCHYCODE",TypeName = "NVARCHAR2")]

        public string HierarchyCode { get; set; }

          

        ///<summary>

        ///父级GUID 

        ///</summary> 

        [Column("PARENTGUID", TypeName = "VARCHAR2")]

        public string ParentGuid { get; set; }

          

        ///<summary>

        ///网址 

        ///</summary> 

        [Column("WEBSITE")]

        public string WebSite { get; set; }

          

        ///<summary>

        ///传真 

        ///</summary> 

        [Column("FAX")]

        public string Fax { get; set; }

          

        ///<summary>

        ///公司地址 

        ///</summary> 

        [Column("COMPANYADDR")]

        public string CompanyAddr { get; set; }

          

        ///<summary>

        ///营业执照 

        ///</summary> 

        [Column("CHARTER")]

        public string Charter { get; set; }

          

        ///<summary>

        ///法人代表 

        ///</summary> 

        [Column("CORPORATIONDEPUTY")]

        public string CorporationDeputy { get; set; }

          

        ///<summary>

        ///创建时间 

        ///</summary> 

        [Column("CREATEDON", TypeName = "DATE")]

        public DateTime?  CreatedOn { get; set; }

          

        ///<summary>

        ///修改时间 

        ///</summary> 

        [Column("MODIFIEDON", TypeName = "DATE")]

        public DateTime?  ModifiedOn { get; set; }

          

        ///<summary>

        ///创建人 

        ///</summary> 

        [Column("CREATEDBY", TypeName = "VARCHAR2")]

        public string CreatedBy { get; set; }

          

        ///<summary>

        ///说明 

        ///</summary> 

        [Column("COMMENTS")]

        public string Comments { get; set; }

          

        ///<summary>

        ///修改人 

        ///</summary> 

        [Column("MODIFIEDBY", TypeName = "VARCHAR2")]

        public string ModifiedBy { get; set; }

          

        ///<summary>

        ///是否末级公司 

        ///</summary> 

        [Column("ISENDCOMPANY")]

        public bool?  IsEndCompany { get; set; }

          

        ///<summary>

        ///是否公司 

        ///</summary> 

        [Column("ISCOMPANY")]

        public bool?  IsCompany { get; set; }

          

        ///<summary>

        ///层级数 

        ///</summary> 

        [Column("BULEVEL")]

        public  double?  BuLevel { get; set; }

          

        ///<summary>

        ///组织类型 

        ///</summary> 

        [Column("BUTYPE")]

        public  double?  BuType { get; set; }

          

        ///<summary>

        ///排序代码 

        ///</summary> 

        [Column("ORDERCODE")]

        public string OrderCode { get; set; }

          

        ///<summary>

        ///排序层级代码 

        ///</summary> 

        [Column("ORDERHIERARCHYCODE")]

        public string OrderHierarchyCode { get; set; }

          

        ///<summary>

        ///单位所属区域编码 

        ///</summary> 

        [Column("AREACODE", TypeName = "VARCHAR2")]

        public string AreaCode { get; set; }

          

    }

///<summary>

    ///道路点位表 Spottings 有"s"后辍,与现有的Spotting区别开来

    ///</summary>

    [Table("COMMON_SPOTTING")]

    public class Spotting

    {

        ///<summary>

        ///点位ID 

        ///</summary> 

        [Key, Column("SPOTTINGID", TypeName = "VARCHAR2")]

        public string SpottingId { get; set; }


        ///<summary>

        ///点位编号(可以为厂家分配的点位编号) 

        ///</summary> 

        [Column("SPOTTINGNO", TypeName = "VARCHAR2"),Required]

        public string SpottingNo { get; set; }


        ///<summary>

        ///点位名称 

        ///</summary> 

        [Column("SPOTTINGNAME")]

        [Required]

        public string SpottingName { get; set; }


        ///<summary>

        ///上传六合一标准代码 

        ///</summary> 

        [Column("UNIQUECODE", TypeName = "VARCHAR2")]

        public string UniqueCode { get; set; }


        ///<summary>

        ///所在道路ID 

        ///</summary> 

        [Column("ROADID", TypeName = "VARCHAR2")]

        public string RoadId { get; set; }


        ///<summary>

        ///经度坐标值 

        ///</summary> 

        [Column("LONGITUDE")]

        public double? Longitude { get; set; }


        ///<summary>

        ///纬度坐标值 

        ///</summary> 

        [Column("LATITUDE")]

        public double? Latitude { get; set; }


        ///<summary>

        ///所在管理部门 

        ///</summary> 

        [Column("DEPARTMENTID", TypeName = "VARCHAR2")]

        [Required]

        public string DepartmentId { get; set; }


        ///<summary>

        ///来源类型 

        ///</summary> 

        [Column("SOURCEKIND", TypeName = "VARCHAR2"), Required]

        public string SourceKind { get; set; }


        ///<summary>

        ///创建用户ID 

        ///</summary> 

        [Column("CREATOR", TypeName = "VARCHAR2")]

        public string Creator { get; set; }


        ///<summary>

        ///创建时间 

        ///</summary> 

        [Column("CREATEDTIME", TypeName = "DATE")]

        public DateTime? Createdtime { get; set; }


        ///<summary>

        ///修改人 

        ///</summary> 

        [Column("MODIFIER", TypeName = "VARCHAR2")]

        public string Modifier { get; set; }


        ///<summary>

        ///修改时间 

        ///</summary> 

        [Column("MODIFIEDTIME", TypeName = "DATE")]

        public DateTime? ModifiedTime { get; set; }


        ///<summary>

        ///保留标记 

        ///</summary> 

        [Column("FLAGS", TypeName = "VARCHAR2")]

        public string Flags { get; set; }


        ///<summary>

        ///备注 

        ///</summary> 

        [Column("REMARK")]

        public string Remark { get; set; }


        ///<summary>

        ///应用名称 

        ///</summary> 

        [Column("APPLICATIONNAME", TypeName = "VARCHAR2")]

        public string ApplicationName { get; set; }


        ///<summary>

        ///所在地区编号(行政区划代码) 

        ///</summary> 

        [Column("AREACODE", TypeName = "VARCHAR2")]

        public string AreaCode { get; set; }


        ///<summary>

        ///拼音简称 

        ///</summary> 

        [Column("BOPOMOFO", TypeName = "VARCHAR2")]

        public string Bopomofo { get; set; }


        ///<summary>

        ///点位类型(字典表字典 ,Kind 为 1003 , 十字路口/丁字路口/圆形转盘/其它) 

        ///</summary> 

        [Column("SPOTTINGTYPE", TypeName = "VARCHAR2")]

        public string SpottingType { get; set; }


        ///<summary>

        ///逻辑删除标记(0 正常数据, 1 逻辑删除) 

        ///</summary> 

        [Column("VIRTUALDELETEFLAG")]

        public double? VirtualDeleteFlag { get; set; }


        ///<summary>

        ///是否停用(0 未停用, 1 停用),默认为0 

        ///</summary> 

        [Column("DISABLED")]

        public bool? Disabled { get; set; }


    }

 5.新建DBContext

public class CommonDBContext : DbContext

    {

        //public CommonDBContext(DbContextOptions options) : base(options)

        //{

        //}


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

        {

            var logger = new LoggerFactory();

            logger.AddConsole();

            optionsBuilder.UseLoggerFactory(logger);

            optionsBuilder.UseOracle("DATA SOURCE=127.0.0.1:1521/tjims;PASSWORD=test;PERSIST SECURITY INFO=True;USER ID=test");

            base.OnConfiguring(optionsBuilder);

        }


        public DbSet<Spotting> Spotting { get; set; }


        public DbSet<Department> Department { get; set; }

    }


6.增删改代码演示

static void Main(string[] args)

        {

            using (CommonDBContext db = new CommonDBContext())

            {

                int total = db.Spotting.Count();

                Console.WriteLine("路口总行数:{0}", total);

                var fDisItem = db.Spotting.FirstOrDefault(e => e.Disabled == true);

                Console.WriteLine("第一条禁用路口:{0}", fDisItem.SpottingName);

                //分页查询演示

                var pageList = db.Spotting.Where(e => e.Disabled == true)

                    .OrderBy(e => e.SpottingName).Skip(10).Take(20).ToList();

                Console.WriteLine("分页查询禁用路口:{0}", pageList.Count);

                var list = db.Spotting.ToList();

                string[] arrSpottingNo = new string[] { "123", "34" };

                db.Spotting.Where(e => arrSpottingNo.Contains(e.SpottingNo)).ToList();




                string minSpottingNo = db.Spotting.Min(e => e.SpottingNo);

                string maxSpottingNo = db.Spotting.Max(e => e.SpottingNo);

                string[] arrAreaCode = db.Spotting.Select(e => e.AreaCode).Distinct().ToArray();

                db.Spotting.Average(e => e.Longitude);

                var dt = DateTime.Now.AddDays(-100);

                //日期过滤

                db.Spotting.Where(e =>

                    e.Createdtime >= dt && e.Createdtime <= DateTime.Now && e.Disabled == true).ToList();



                var itemNew = new Spotting

                {

                    SpottingId = Guid.NewGuid().ToString("N"),

                    SpottingName = "test",

                    SpottingNo = "test",

                    Creator = "admin",

                    Createdtime = DateTime.Now,

                    DepartmentId = Guid.NewGuid().ToString("N")

                };

                db.Entry(itemNew).State = EntityState.Added;

                Console.WriteLine("新增一条路口Id:{0} 数据", itemNew.SpottingId);


                var dItem = db.Spotting.Find(itemNew.SpottingId);

                db.Remove(dItem);

                Console.WriteLine("删除路口Id:{0} 数据", itemNew.SpottingId);


                //关联查询

                var x = (from p in db.Spotting

                         join q in db.Department

                         on p.DepartmentId equals q.DepartmentId

                         select new { p.SpottingName, p.SpottingId, p.DepartmentId, q.BuName }).OrderBy(e => e.SpottingName)

                         .Skip(10).Take(20).ToList();


                db.SaveChanges();

            }

            Console.Read();

        }

 

 

回到顶部

Github源码地址

https://github.com/CrazyJson/Citms.EntityFrameworkCore.Oracle,有兴趣的可以把源码下下来看看。

回到顶部

总结

      如果项目中也想使用EF Core Oracle,可以安装包开始Coding。如果使用中遇到BUG,请在Git上回复,我将进行修复。后续等Oracle官方出了正式版后,可以直接进行替换。

项目代码参考EF Core https://github.com/aspnet/EntityFrameworkCore/tree/dev/samples/OracleProvider。

原文地址:https://www.cnblogs.com/yanweidie/p/9064609.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nssl1452-排行榜【数论】

正题 题目大意 给出nnn&#xff0c;求一个长度为2n2n2n的由1∼n1\sim n1∼n各两个组成的一个序列使得有一个数的前缀数量不小于任何数字。 解题思路 首先这个数字肯定是第一个数字&#xff0c;这里假设为111&#xff0c;那么要求任意位置111的前缀数量都不小于别的数。 也就…

【离散化】【差分】幻灯片(jzoj 1609)

幻灯片 题目大意&#xff1a; 有n个幻灯片映在一起&#xff0c;每个幻灯片的的左上角是a1,a2,右上角是a3,a4,颜色是a5当多个幻灯片在同一个位置时&#xff0c;颜色就是他们的和&#xff0c;求有所少种颜色 样例输入 3 2 2 3 3 2 2 0 4 4 1 1 1 3 5 3 样例输出 4 数据…

.net core在网关中统一配置Swagger

最近在做微服务的时候&#xff0c;由于我们是采用前后端分离来开发的&#xff0c;提供给前端的直接是Swagger&#xff0c;如果Swagger分布在各个API中&#xff0c;前端查看Swagger的时候非常不便&#xff0c;因此&#xff0c;我们试着将Swagger集中放到网关中。这里我用两个API…

P4074-[WC2013]糖果公园【树上带修莫队】

正题 题目链接:https://www.luogu.com.cn/problem/P4074 题目大意 nnn个点的一颗数&#xff0c;第iii个点有一颗cic_ici​种类的糖。 第iii次获得jjj种类的糖可以产生价值wi∗vjw_i*v_jwi​∗vj​。 每次操作 修改一个点的糖果种类询问一个路径的价值和 解题思路 用欧拉序…

闲来无事刷水题、简单博弈论专题、sg函数、洛谷

记 今天闲来无事&#xff0c;不想刷codeforces了&#xff0c;到洛谷提高组训练营找几道水题刷着玩玩&#xff08;虽然自己早已过了打OI的年纪&#xff09;&#xff5e; 简单博弈论专题 P1199 三国游戏 这么考虑&#xff0c;由于电脑总是不能让我搭配出当前能搭配出的最大的…

医院(jzoj 1611)

医院 题目大意&#xff1a; 有n个城市&#xff0c;有m条线路使他们相连&#xff08;有向&#xff09;&#xff0c; 在一些城市中建立医院&#xff0c;相连的城市只能有一间医院&#xff0c;每个医院可以派医生去别的城市&#xff0c;当医生走的线路>3时&#xff0c;他们会…

2019.01.24【NOIP普及组】模拟赛C组

总结 这一次的分数&#xff1a;1002562.562.5250 第一题老实打完&#xff0c;100分&#xff0c;第二题蒙点25分&#xff0c;第三题只打了Floyed&#xff0c;还有一部分&#xff08;匈牙利算法&#xff09;没打&#xff0c;第四题蒙点特判&#xff0c;62.5,&#xff08;说实在我…

nssl1453-Fibonacci数列【矩阵乘法,线段树】

正题 题目大意 给出nnn和si(i∈[0..n−1])s_i(i\in[0..n-1])si​(i∈[0..n−1])&#xff0c;对于大部分情况有sxsx%ns_xs_{x\%n}sx​sx%n​。 有递推式FiFi−1si−1Fi−2si−2F_iF_{i-1}s_{i-1}F_{i-2}s_{i-2}Fi​Fi−1​si−1​Fi−2​si−2​ 有mmm个情况的sx!sx%ns_x!s_{…

Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

在大型网站系统设计中&#xff0c;随着分布式架构&#xff0c;特别是微服务架构的流行&#xff0c;我们将系统解耦成更小的单元&#xff0c;通过不断的添加新的、小的模块或者重用已经有的模块来构建复杂的系统。随着模块的不断增多&#xff0c;一次请求可能会涉及到十几个甚至…

洛谷 P1967货车运输 并查集+贪心 不需要用LCA!

题目链接 题目链接 题解 要求所有的路径中最小边长的最大值&#xff01; 我们贪心的加边&#xff0c;依照边从大往小的方式往里添加&#xff0c;然后合并并查集。 每次当查询分布在两个待合并的并查集的时候&#xff0c;当前的边长就是这次查询的答案。 我们对每个并查集…

【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)

香甜的黄油 Sweet Butter luogu 1828 题目大意&#xff1a; 有n头奶牛&#xff0c;他们在不同的牧场中&#xff0c;他们之间有一些路&#xff0c;现在要让他们去一个地方吃黄油&#xff0c;使他们的总距离最小 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法&…

P1081 开车旅行 倍增 洛谷

题目连接 题意 题目已经说的hin明确了。 题解 我们要求出从每个点出发&#xff0c;小A要走的城市和小B要走的城市。 我们把ii以后的所有点的海拔加入到set" role="presentation" style="position: relative;">setset&#xff0c;然后拿H[i]H[…

nssl1454-最短路【并查集,贪心】

正题 题目大意 nnn个点&#xff0c;每个点可以走到[ai,n][a_i,n][ai​,n]&#xff0c;每个点可以从[bi,n][b_i,n][bi​,n]到达。 求disi,j∗(ij)dis_{i,j}*(ij)disi,j​∗(ij)的异或和 解题思路 首先我们可以知道肯定是先往后跳再往前走最优&#xff0c;因为如果先往前再往后…

.NET Core 跨平台执行命令、脚本

一.前言我们可能会遇到需要在程序中执行一些系统命令&#xff0c;来获取一些信息&#xff1b;或者调用shell脚本。.NET Core 目前已经可以跨平台执行&#xff0c;那么它如何跨平台执行命令呢&#xff0c;请看下面的讲解。二.ProcessStartInfo、Process 类介绍我们主要用到的两个…

nssl1458-HR 的疑惑【枚举】

正题 题目大意 给出nnn&#xff0c;求[1..n][1..n][1..n]中有多少个数可以被ab(b>1)a^b(b>1)ab(b>1)表示 解题思路 首先如果bbb等于222&#xff0c;那么可以被表示的数就是n\sqrt nn​个 bbb不是质数时&#xff0c;显然所以的数都可以被一个bbb是质数的情况表示。 …

性能是.NET Core的一个关键特性

关键要点.NET Core是跨平台的&#xff0c;可运行在Windows、Linux、Mac OS X和更多平台上&#xff1b;与.NET相比&#xff0c;发布周期要短得多。大多数.NET Core 都是通过NuGet软件包交付的&#xff0c;可以很容易地发布和升级。更快速的发布周期对性能提升工作以及改进诸如So…

简单的数学问题 洛谷 P1414 又是毕业季II

题意 给出n个数字&#xff0c;询问从中挑出k个数字&#xff0c;最大可能的公共gcd是多少。 题解 k个数的gcd一定出现至少k次。 我们遍历所有的数并对每个数字求它所有的因子&#xff0c;统计各个因子出现的个数。 给定k时&#xff0c;我们的答案就是所有出现次数>k的因…

【枚举】连续自然数和(jzoj 2102)

连续自然数和 题目大意&#xff1a; 输出一个n&#xff0c;求出所有相加等于n的连续自然数序列 样例输入 10000 样例输出 18 142 297 328 388 412 1998 2002 数据范围限制 10 < M < 2,000,000 解题思路&#xff1a; 这道题的正解的时间复杂度是o(2n)o\left …

nssl1460-逛机房【bfs】

正题 题目大意 nnn次询问&#xff0c;给出一个数xxx&#xff0c;每次可以进行操作 修改其中一个位&#xff0c;去掉前导零删掉其中一个位&#xff0c;去掉前导零 询问最少步骤使得xxx变为一个完全平方数 解题思路 我们可以从完全平方数开始广搜&#xff0c;操作变为 加入一…

将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1

微软发布了 .NET Core 2.1 RC 1 &#xff0c;虽然只是 Release Candidate 版&#xff0c;但已经可以在生产环境中使用。NET Core 2.1 RC is supported by Microsoft and can be used in production..NET Core 2.1 的性能大提升早让人垂涎三尺&#xff0c;看到这个消息后&#x…