发布时间:2026/8/27 16:53:45
InventorySample数据访问实战:EF Core搭配SQLite与SQL Server双数据源全解 InventorySample数据访问实战EF Core搭配SQLite与SQL Server双数据源全解【免费下载链接】InventorySampleSample UWP application for LOB scenarios项目地址: https://gitcode.com/gh_mirrors/in/InventorySampleInventorySample 是微软开源的 UWP 企业级LOB库存管理应用示例它基于Entity Framework CoreEF Core实现了一套干净利落的数据访问方案默认使用本地SQLite数据库开箱即用同时支持一键切换到SQL Server远程数据源。本文将从新手视角带你拆解这套双数据源设计的每一层实现帮助你快速掌握 EF Core 在真实业务应用中的数据访问实战。快速上手获取 InventorySample 数据访问示例如果你想在本地跑起来观察这套架构只需要 3 步克隆仓库git clone https://gitcode.com/gh_mirrors/in/InventorySample用 Visual Studio 打开解决方案 src/Inventory.sln选择 Windows 10/11 目标平台并运行Inventory.App项目应用首次启动后自带一份 SQLite 示例数据库VanArsdel.1.01.db无需任何配置即可浏览客户、订单、商品数据。整个解决方案分为 4 个项目数据访问逻辑被隔离在Inventory.Data中界面与业务分别由Inventory.App和Inventory.ViewModels承担为什么需要SQLite SQL Server双数据源对于库存这类 LOB 场景开发演示和正式部署往往面对两种完全不同的环境本地演示/离线场景不想安装数据库服务器直接读一个.db文件即可SQLite 是最佳选择企业级生产场景需要共享的 SQL Server 或 Azure SQL Database支持多用户并发。InventorySample 的做法是把数据从哪来抽象成接口把怎么用数据完全与数据库类型解耦。切换数据源就像换一个插头上层代码一行都不用改。拆解 Inventory.Data三层数据访问设计Inventory.Data 项目 是 .NET Standard 类库内部按三个层次组织详见官方文档 docs/Architecture/DataAccess.md1️⃣ Data实体模型层Data文件夹下是与数据库表一一对应的实体类例如 Customer.cs、Order.cs、Product.cs、OrderItem.cs还有记录数据库版本的 DbVersion.cs。这些模型在整个 App 中充当数据传输对象DTO与界面显示用的 Model 是分离的。2️⃣ IDataSource数据库上下文层核心接口 IDataSource.cs 暴露了所有DbSetT集合Customers、Orders、Products、OrderItems以及分类、国家、支付方式等查找表还有EntryTEntity和SaveChangesAsync两个 EF Core 关键操作。它有两个实现实现类数据库关键配置SQLiteDb.cs本地 SQLite 文件optionsBuilder.UseSqlite(_connectionString)SQLServerDb.csSQL ServeroptionsBuilder.UseSqlServer(_connectionString)两个类几乎一模一样唯一区别就是OnConfiguring里调用的 EF Core 提供程序。它们都在OnModelCreating中为OrderItem定义了复合主键OrderID OrderLine这是一个很实用的 EF Core 建模技巧。3️⃣ IDataService数据操作层接口 IDataService.cs 定义了客户、订单、订单项、商品四类数据的增删改查契约GetCustomerAsync、GetOrdersAsync、UpdateProductAsync……由 SQLiteDataService.cs 与 SQLServerDataService.cs 实现。大量通用 LINQ 查询逻辑写在抽象基类 DataServiceBase.cs 中两个具体实现只是注入不同的IDataSource上下文——这就是一次编写双端运行的关键。一键切换数据源工厂模式 配置项切换逻辑非常简洁核心在两个文件里① 配置项AppSettings.cs 用本地设置存储DataProvider枚举值SQLite/SQLServer默认 SQLite同时管理两种连接字符串SQLiteData SourceDatabase/VanArsdel.1.01.dbSQL Server 默认值Data Source.\SQLExpress;Initial CatalogVanArsdelDb;Integrated SecuritySSPI② 工厂DataServiceFactory.cs 的CreateDataService()根据AppSettings.Current.DataProvider走switch分支返回对应的数据服务实例switch (AppSettings.Current.DataProvider) { case DataProviderType.SQLite: return new SQLiteDataService(AppSettings.Current.SQLiteConnectionString); case DataProviderType.SQLServer: return new SQLServerDataService(AppSettings.Current.SQLServerConnectionString); } 工厂里还藏了一个彩蛋IsRandomErrorsEnabled开关可以随机抛出异常用于测试 Activity Log 的异常捕获链路是学习数据访问异常处理的好素材。设置页实战验证连接与自动建库在应用的Settings 页面界面定义见 SettingsView.xaml逻辑在 SettingsViewModel.cs可以完成数据源切换Local Data Provider选择本地 SQLite附带Reset data按钮可一键还原示例数据SQL Data Provider填入连接字符串后可以Validate Connection验证连接由 ValidateConnectionViewModel.cs 实现。它通过 EF Core 的IDatabaseCreator.ExistsAsync()判断库是否存在再读取DbVersion表比对版本号当前1.01分别提示连接成功/版本不匹配/库不存在三种状态Create Database自动建库由 CreateDatabaseViewModel.cs 实现。调用Database.EnsureCreatedAsync()按 EF Core 模型自动建表然后逐表把本地 SQLite样板库中的示例数据拷贝进 SQL Server进度条按表逐项推进最后写入DbVersion版本记录。这套模型即 Schema 版本校验的初始化流程正是 EF CoreCode First思想在实战中的典型应用。数据如何流进界面界面并不直接碰 EF Core而是走一条清晰的链路ViewModel → 业务服务Services→ IDataService → DbContext → 数据库例如客户详情页 CustomerDetailsViewModel.cs 通过构造函数注入 ICustomerService而 CustomerService.cs 每次操作时using (var dataService DataServiceFactory.CreateDataService())现建现用、用完即释放。业务服务同时充当DTO → 界面 Model的映射器如Customer→CustomerModel后者才实现INotifyPropertyChanged让 EF Core 实体保持无行为的纯净状态。列表数据则由VirtualCollection见 src/Inventory.App/Common/VirtualCollection/做虚拟化分页加载保证大数据量下列表流畅。新手避坑指南EF Core 数据访问 5 个要点基于这份源码总结出几条例值得记住的实战经验用using管好上下文生命周期DbContext创建即打开资源代码库统一在using块中创建并释放如 ValidateConnectionViewModel.cs上下文不是线程安全的同一实体实例不能被多个上下文同时跟踪跨线程请新建上下文只读查询加AsNoTracking()建库拷贝数据时使用见 CreateDatabaseViewModel.cs跳过变更跟踪显著提升性能DbSet访问本身不触发查询只有ToList、First等终端操作才真正执行 SQL写库统一走SaveChangesAsync配合Entry(entity).State区分 Added/Modified变更先记在ChangeTracker中提交时才落库。参考文件清单模块路径双 DbContext 实现src/Inventory.Data/DataContexts/数据服务基类与实现src/Inventory.Data/DataServices/数据源工厂DataServiceFactory.cs数据源配置AppSettings.cs连接验证 / 自动建库src/Inventory.ViewModels/ViewModels/Settings/官方数据访问文档docs/DataAccess/README.md、docs/Architecture/DataAccess.md掌握这套接口抽象上下文 工厂切换数据源 服务层映射模型的模式后你就能在自己的 .NET 应用中轻松实现 EF Core 多数据库支持——这正是 InventorySample 作为学习范本的最大价值。【免费下载链接】InventorySampleSample UWP application for LOB scenarios项目地址: https://gitcode.com/gh_mirrors/in/InventorySample创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/27 16:48:43

神奇弹幕:B站直播场控机器人,弹幕过滤、自动答谢一步到位

神奇弹幕:B站直播场控机器人,弹幕过滤、自动答谢一步到位 【免费下载链接】MagicalDanmaku 本仓库及所有相关项目已永久停止开发、维护和任何形式的分发。 项目地址: https://gitcode.com/gh_mirrors/bi/MagicalDanmaku 直播间垃圾弹幕刷得比正常…

2026/8/27 17:38:56

构建链路迁移时先让旧流程能回退

构建链路迁移时先让旧流程能回退 1. 重构演习的惨烈教训:为了快 3 秒,把上线发布搞挂了 存量项目从 Webpack 迁移到 Vite 时,不能只替换配置文件。依赖兼容性、浏览器支持范围、资源路径和运行时全局变量都需要单独验证。 例如,…

2026/8/27 17:38:56

组合式架构先明确状态和权限边界

组合式架构先明确状态和权限边界1. 抓包日志里的惊魂 5 分钟:API Key 随响应式 State 裸奔上网 安全审查应检查前端状态树、日志 SDK 和网络请求中是否出现凭证或个人信息。将 API Key、JWT 等敏感值放入 Pinia 或其他全局响应式状态,会扩大 DevTools、序…

2026/8/27 17:38:56

渲染优化要用可重复的测量说话

渲染优化要用可重复的测量说话 1. 性能优化会上的主观拉扯:“我觉得卡”和“我觉得挺流畅” 性能复盘中,“感觉更流畅”并不能说明优化有效。以 RAG 流式输出为例,给文本区域加上 React.memo 未必能减少右侧文档列表的更新;不同测…

2026/8/27 17:38:56

生成界面前先算清楚配置能不能解决

生成界面前先算清楚配置能不能解决 1. 业务部门的产研幻想:让大模型直接实时生成前端 UI 组件 低代码报表平台常见的设想是:用户输入自然语言,例如“生成华南区上季度销售额折线图,带导出和筛选”,模型直接返回 JSX、…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…