检测
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)语句删掉也是一样的效果。