c# Database.SqlQuery<T> 试验

1.概要

Database.SqlQuery<T> T应该是个什么样的类型呢?

1.简单类型可以吗?(int,string)

2.用类有啥要求?

2.1 简单的成员空页面? int a;

2.2 是否必须要属性 ? int a{seg;get;}

2.3 变量是否需要共有?

3.用objcect 作为这个T可以吗?

4.用dynamic可以吗

2.试验结果

|---------|-----------------|------|-------|----|----|----|
| T(Model) || | | | | |
| 分类 | 成员/属性 | 数据多T | 数据少于T | 共有 | 私有 | |
| 简单类型 | | 1 | | | | OK |
| object | | | | | | NG |
| dynamic | | | | | | NG |
| 普通对象 | int a; | 1 | | 1 | | NG |
| 普通对象 | int a; | | 1 | 1 | | NG |
| 普通对象 | int a{set;get;} | 1 | | 1 | | OK |
| 普通对象 | int a{set;get;} | | | | 1 | OK |
| 普通对象 | int a{set;get;} | | 1 | 1 | | OK |
| 普通对象 | int a{set;get;} | | | | 1 | OK |
| 数据模型 | int a{set;get;} | 1 | | | | OK |
| 数据模型 | int a{set;get;} | | 1 | | | NG |
| | | 数据可以少于T单是主键不能少 |||| |

通过上面的试验,可以确定 对应普通对象 只要是属性(int a{set;get;})无论是否共有都可以成功获取到数据,但是如果定义为了数据模型(DbSet<Tb1> Tb1s { set; get; }),那么数据不能少于T的内容。

3.试验代码

cs 复制代码
using MySql.Data.EntityFramework;
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace EF试验2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine();
            Program p = new Program();
            p.mian();
            Console.ReadKey();
        }
        private void mian()
        {
            //test1();
            //test2();
            //test2_2();
            test2_2_1();
            //test2_1();
            //test3();
            //test4();
            //test5();
            //test6();
            //test6_1();
            //test6_1_1();
            //test7();
            //test8();
            //test9();
            //test9_1();
            //test9_1_1();
        }
        private void test1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            Tb1 tb1 = new Tb1();
            tb1.v1 = 1;
            dBContentMy.Tb1s.Add(tb1);
            dBContentMy.SaveChanges();
        }
        private void test2()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<Tb1>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        private void test2_2()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<Tb1>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        private void test2_2_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<Tb1>("SELECT id,v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        private void test2_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<Tb1>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        /// <summary>
        /// 使用非引用类型 - 可以
        /// </summary>
        private void test3()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<int>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        /// <summary>
        /// 使用非引用类型+类型换行 - 可以
        /// </summary>
        private void test4()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<string>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            //Console.WriteLine();
        }
        /// <summary>
        /// 使用dynamic/object 都不行
        /// 物料是但数据还是使用* 都不行
        /// </summary>
        private void test5()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<dynamic>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        class A{
            int v1;
        }
        /// <summary>
        /// 使用 少于实际变量的类型 可以
        /// </summary>
        private void test6()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<A>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        class A1
        {
            int v1 { set; get; }
        }
        /// <summary>
        /// 使用 少于实际变量的类型 可以
        /// </summary>
        private void test6_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<A1>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        class A11
        {
            public int v1;
        }
        /// <summary>
        /// 使用 少于实际变量的类型 可以
        /// </summary>
        private void test6_1_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<A11>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        class B
        {
            int v1;
            int v2;
        }
        /// <summary>
        /// 使用 多于实际变量的类型 可以
        /// </summary>
        private void test7()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<B>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        
        /// <summary>
        /// 使用 多于实际变量的类型 可以
        /// </summary>
        private void test8()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<B>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }

        class C
        {
            int v1;
            int id;
        }
        /// <summary>
        /// 使用 多于实际变量的类型 可以
        /// </summary>
        private void test9()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<C>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        class C1
        {
            int v1 { set; get; }
            int id { set; get; }
        }
        /// <summary>
        /// 使用 多于实际变量的类型 使用属性 可以
        /// </summary>
        private void test9_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<C1>("SELECT v1 FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
        /// <summary>
        /// 使用匹配的类型 使用属性 可以
        /// </summary>
        private void test9_1_1()
        {
            DBContentMy dBContentMy = new DBContentMy();
            var a = dBContentMy.Database.SqlQuery<C1>("SELECT * FROM tb1").FirstOrDefaultAsync();
            a.Wait();
            var b = a.Result;
            Console.WriteLine(b);
        }
    }
    [Table("Tb1")]
    public class Tb1
    {
        public int id { set; get; }
        public int v1 { set; get; }
    }
    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class DBContentMy : DbContext
    {
        public DBContentMy() : base("DbConnStr")
        {
            Database.SetInitializer<DBContentMy>(null);
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }


        public DbSet<Tb1> Tb1s { set; get; }
    }
}
相关推荐
liulilittle11 分钟前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
88号技师18 分钟前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
勤奋的知更鸟24 分钟前
Java 编程之模板方法模式
java·开发语言·模板方法模式
上单带刀不带妹1 小时前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-2 小时前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼2 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
军训猫猫头3 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
真的想上岸啊3 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
明天好,会的3 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
丁劲犇4 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse