dotnet使用ef core读写sqlite数据库
要使用EF Core读写SQLite数据库,您需要安装以下NuGet包:
Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Tools
以下是一个示例代码,它演示了如何使用EF Core读写SQLite数据库:
using System; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace MyNamespace { public class MyContext : DbContext { public DbSet<MyEntity> MyEntities { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=mydatabase.db"); } } public class MyEntity { public int Id { get; set; } public string Name { get; set; } } public class Program { static void Main(string[] args) { using (var context = new MyContext()) { context.Database.EnsureCreated(); var entity = new MyEntity { Name = "John Doe" }; context.MyEntities.Add(entity); context.SaveChanges(); var entities = context.MyEntities; foreach (var e in entities) { Console.WriteLine($"Id: {e.Id}, Name: {e.Name}"); } } } } }
在上面的代码中,我们创建了一个名为MyContext的类,该类继承自DbContext类。我们还创建了一个名为MyEntity的类,该类表示数据库中的实体。
在MyContext类中,我们重写了OnConfiguring方法,并使用UseSqlite方法配置SQLite数据库。在Program类中,我们使用MyContext类创建了一个数据库上下文,并使用EnsureCreated方法创建了数据库。
我们还创建了一个名为entity的实体,并使用Add方法将其添加到数据库中。然后,我们使用SaveChanges方法保存更改,并使用MyEntities属性获取所有实体。
最后,我们使用foreach循环遍历所有实体,并将其打印到控制台。
希望这可以帮助您!
不想使用using语句块读写数据库
要在不使用using语句块的情况下使用EF Core读写SQLite数据库,您可以使用以下代码:
using System; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace MyNamespace { public class MyContext : DbContext { public DbSet<MyEntity> MyEntities { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=mydatabase.db"); } } public class MyEntity { public int Id { get; set; } public string Name { get; set; } } public class Program { static void Main(string[] args) { var context = new MyContext(); context.Database.EnsureCreated(); var entity = new MyEntity { Name = "John Doe" }; context.MyEntities.Add(entity); context.SaveChanges(); var entities = context.MyEntities; foreach (var e in entities) { Console.WriteLine($"Id: {e.Id}, Name: {e.Name}"); } context.Dispose(); } } }
在上面的代码中,我们创建了一个名为MyContext的类,该类继承自DbContext类。我们还创建了一个名为MyEntity的类,该类表示数据库中的实体。
在MyContext类中,我们重写了OnConfiguring方法,并使用UseSqlite方法配置SQLite数据库。在Program类中,我们使用MyContext类创建了一个数据库上下文,并使用EnsureCreated方法创建了数据库。
我们还创建了一个名为entity的实体,并使用Add方法将其添加到数据库中。然后,我们使用SaveChanges方法保存更改,并使用MyEntities属性获取所有实体。
最后,我们使用foreach循环遍历所有实体,并将其打印到控制台。请注意,我们在程序结束时调用了context.Dispose()方法来释放资源。
将下面python中的sqlalchemy的entity改成C#v所ef core的entity
class Battery(MappedBase): """电池电量模型类""" __tablename__ = "battery" id: Mapped[int] = mapped_column(primary_key=True, index=True, autoincrement=True, comment="主键id") ip: Mapped[str] = mapped_column(String(20), nullable=False, comment="AGV车的IP地址") name: Mapped[str] = mapped_column(String(20), nullable=True, comment="AGV车的名称") # level start_level: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="初始电量值") end_level: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="结束电量值") # temp start_temp: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="开始充电时的电池温度") end_temp: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="结束充电时的电池温度") # voltage start_voltage: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="开始充电时的电池电压") end_voltage: Mapped[float] = mapped_column(Float, default=0, nullable=True, comment="结束充电时的电池电压") # cycle start_cycle: Mapped[int] = mapped_column(Integer, default=0, nullable=True, comment="开始充电的充电次数") end_cycle: Mapped[int] = mapped_column(Integer, default=0, nullable=True, comment="结束充电的充电次数") # time start_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=True, comment="充电的初始时间") end_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=True, comment="充电的初始时间") # duration duration: Mapped[int] = mapped_column(Integer, default=0, nullable=True, comment="充电时长,单位s") # interrupt interrupt: Mapped[bool] = mapped_column(Boolean, nullable=True, default=0, comment="是否是手动中断充电,默认是自动离开充电") charging: Mapped[bool] = mapped_column(Boolean, nullable=True, default=0, comment="是否正在充电")
以下是将上述Python代码转换为C# EF Core的实体类的示例代码:
using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MyNamespace { [Table("battery")] public class Battery { [Key] [Column("id")] public int Id { get; set; } [Required] [Column("ip", TypeName = "varchar(20)")] public string Ip { get; set; } [Column("name", TypeName = "varchar(20)")] public string Name { get; set; } [Column("start_level", TypeName = "float")] public float StartLevel { get; set; } [Column("end_level", TypeName = "float")] public float EndLevel { get; set; } [Column("start_temp", TypeName = "float")] public float StartTemp { get; set; } [Column("end_temp", TypeName = "float")] public float EndTemp { get; set; } [Column("start_voltage", TypeName = "float")] public float StartVoltage { get; set; } [Column("end_voltage", TypeName = "float")] public float EndVoltage { get; set; } [Column("start_cycle", TypeName = "int")] public int StartCycle { get; set; } [Column("end_cycle", TypeName = "int")] public int EndCycle { get; set; } [Column("start_time", TypeName = "datetime")] public DateTime StartTime { get; set; } [Column("end_time", TypeName = "datetime")] public DateTime EndTime { get; set; } [Column("duration", TypeName = "int")] public int Duration { get; set; } [Column("interrupt", TypeName = "bit")] public bool Interrupt { get; set; } [Column("charging", TypeName = "bit")] public bool Charging { get; set; } } }
在上面的代码中,我们创建了一个名为Battery的类,该类表示要映射到数据库表的实体。我们还使用Table、Key和Column属性来指定表名、主键和列名。
请注意,我们使用Required属性将Ip属性标记为必需的,并使用TypeName属性指定列的数据类型。我们还使用Column属性指定列名。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2023-01-15 flask_socketio_cors
2023-01-15 axios_socketio_cros_test