Item with Same Key has already been added 使用freesql时报错

检测

using FreeSql;
using FreeSql.DataAnnotations;
using FreeSql.Dameng;
using Microsoft.Extensions.DependencyInjection;
namespace 重新开始
{
    internal class Program
    {
        static IFreeSql fsql =
            new FreeSqlBuilder().UseConnectionString(DataType.Dameng, @"server=LOCALHOST;port=2028;user=SYSDBA;password=SYSDBA;database=SYSDBA;schema=SUPERMARKET;poolsize=5")
           .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句
            .UseAutoSyncStructure(true)
            .Build(); //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。;
        [Table(Name ="GOODS")]
        public class goods
        {
            [Column(IsPrimary = true)]
            public int ID { get; set; }
            public string NAME { get; set; }
            public decimal GOOD_NUMBER { get; set; }
            public decimal PRICE { get; set; }
            public string TYPE { get; set; }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            try
            {
                var test = fsql.Select<goods>()
                    .ToDataTable();
            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}

此时弹出错误:

原因:在Code First模式下再次创建相同的索引,可能会导致冲突。在这种情况下,您可以考虑关闭Code First模式下的索引同步功能。

解决方法:
          在FreeSql中,您可以通过设置UseAutoSyncStructure属性为false来关闭Code First模式下的索引同步功能。这个属性决定了FreeSql是否会在程序运行时自动同步实体结构到数据库,包括创建或修改表结构。如果您不希望在生产环境中自动同步实体结构,您应该在配置FreeSql实例时将这个属性设置为false

  Dm_sql =
  new FreeSqlBuilder().UseConnectionString(DataType.Dameng, @"server=10.15.0.233;port=2028;user=SYSDBA;password=SYSDBA;database=SYSDBA;schema=SUPERMARKET;poolsize=5")
//  .UseMonitorCommand(cmd => richTextBox1.Text += cmd.CommandText)//监听SQL语句
  .UseAutoSyncStructure(false)
  .Build(); //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。;

或者


            Dm_sql.CodeFirst.IsAutoSyncStructure = false;

更改后,运行成功


6.13日更新:

IsAutoSyncStructure这个参数默认是false的,所以直接将UseAutoSyncStructure(false)语句删掉也是一样的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值