【问题标题】:LINQ to SQL not supported in .net 5.0?.net 5.0 不支持 LINQ to SQL?
【发布时间】:2021-04-23 08:01:54
【问题描述】:

我的项目使用 .NetFramework 4.6.2 和来自 MSSQL 的“LINQ to SQL”查询。 一个类定义了所有需要在数据库中查询并继承到DataContext(System.Data.Linq)的表。

最近打算把程序升级到.net5.0。 但是,我发现“LINQ to SQL”似乎不支持 .net5.0。

谁能建议如何在 .net5.0 中或使用其他方式编写“LINQ to SQL”?

谢谢。

--

4 月 23 日下午 6:38 更新: 刚刚在Nuget上找到SqlSugarCore,测试一下可以用。但仍然想知道是否有任何类似的工具可以使用?

【问题讨论】:

  • @MickyD 甚至在那时 L2S 基本上是 EOL。甚至在那个时候,解决方案就是简单地切换到实体框架。符合“使用其他方式”的条件
  • .NET 5 中最接近 L2S 的是:EF Core;存在一些差异,但它大部分的工作方式类似;我们迁移没有太多戏剧性。
  • @MickyD “OP 已经表示他不想要 ORM” - 但 OP 正在使用 L2S,它已经至少一英尺穿过大门进入 ORM 领域;它是否像 EF、LLBLGen 等“完整”的 ORM 一样固执己见:不,但它也不是“不是 ORM”
  • 您是否使用过 EFCore 或类似的东西?您的项目中有任何 DBContext 设置吗?
  • 官方替换为Entity Framework。在github.com/FransBouma/LinqToSQL2github.com/albahari/LinqToSQL2 也有 L2S 的非官方分支(我认为这是 Linqpad 使用的)

标签: c# linq-to-sql .net-5


【解决方案1】:

我尝试过使用 EFCore,它可以工作。

只需在 NuGet 中安装 Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServer

将那些显示的错误从 L2S 替换为 EFCore。示例:DataContext(L2S) => DbContext(EFCOre), public Table TableA;(L2S) => public DbSet TableA { get;放; }(EFCore)...等

注意,如果你的表有多个主键,那么你必须如下写override OnModelCreating,TableAClass 有三个键,TableBClass 有一个键。

。每张表的设置键

protected override void OnModelCreating(ModelBuilder _modelBuilder)
        {
            _modelBuilder.Entity<TableAClass>().HasKey(_obj => new { _obj.Key1, _obj.Key2, _obj.Key3 });
            _modelBuilder.Entity<TableBClass>().HasKey(_obj => new { _obj.Key1 });
        }

我卡了几天,在互联网上找不到示例。因此,我决定把我的代码放在这里。

。设置数据库类

public class DBClassName : DbContext
    {
        public DbSet<TableAClass> TableAs { get; set; }
        public DbSet<TableBClass> TableBs { get; set; }

        protected override void OnModelCreating(ModelBuilder _modelBuilder)
        {
            _modelBuilder.Entity<TableAClass>().HasKey(_obj => new { _obj.Key1, _obj.Key2, _obj.Key3 });
            _modelBuilder.Entity<TableBClass>().HasKey(_obj => new { _obj.Key1 });
        }

        public DBClassName(string _connStr) : base(GetOptions(_connStr))
        {
        }

        private static DbContextOptions GetOptions(string connectionString)
        {
            return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder<DBClassName>(), connectionString).Options;
        }


    }

。设置表类

[Table("TableName")]
    public class TableClassName
    {
        public string ColumnA { get; set;}

        public string ColumnB { get; set;}

    }

这个答案应该归功于所有在 cmets 中帮助我的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2012-07-13
    相关资源
    最近更新 更多