我一直在寻找 Linq-To-SQL 的开源替代方案,并遇到了Vici CoolStorage,它非常适合我的需求(轻量级、开源、支持 Access 和 SQL Server)。
但是,我在让它检索数据时遇到了一些麻烦(尽管它可以很好地添加数据),并且我已经使用 2 个不同的数据库在 2 个不同的环境中复制了相同的问题,所以很明显这是我做错了,希望有人可以指出那是什么。
我创建了一个带有 2 个表的新 Access mdb - AccountStatus 和 Account。AccountStatus 包含 AccountStatusID、AccountStatusName,而 Account 包含 AccountID、AccountName、AccountStatusID。
我已将 Vici.CoolStorage 和 Vici.Core 引用添加到我的项目(使用 NuGet),创建了一个域文件夹,并添加了以下 2 个类以映射到我的表:
帐户状态:
using Vici.CoolStorage;
namespace ViciAccount.Domain
{
[MapTo("AccountStatus")]
public abstract partial class AccountStatus : CSObject<AccountStatus, int>
{
public abstract int AccountStatusID { get; set; }
[ToString]
public abstract string AccountStatusName { get; set; }
[OneToMany(LocalKey = "AccountStatusID", ForeignKey = "AccountStatusID")]
public abstract CSList<Account> Accounts { get; }
}
}
帐户:
using Vici.CoolStorage;
namespace ViciAccount.Domain
{
[MapTo("Account")]
public abstract partial class Account : CSObject<Account, int>
{
public abstract int AccountID { get; set; }
[ToString]
public abstract string AccountName { get; set; }
public abstract int AccountStatusID { get; set; }
[ManyToOne(LocalKey = "AccountStatusID", ForeignKey = "AccountStatusID")]
public abstract AccountStatus AccountStatus { get; set; }
}
}
然后,我将以下代码添加到要测试的 Form 的 Load 事件中:
if (!CSConfig.HasDB())
{
CSConfig.SetDB(new CSDataProviderAccess(@"G:\FilePath\Test Project\ViciTest.mdb"));
CSConfig.UseTransactionScope = false;
}
CSConfig.Logging = true;
CSConfig.LogFileName = @"G:\FilePath\Test Project\vici.log";
AccountStatus accountStatus = AccountStatus.New();
accountStatus.AccountStatusName = "Live";
accountStatus.Save();
accountStatus = AccountStatus.New();
accountStatus.AccountStatusName = "Closed";
accountStatus.Save();
CSList<AccountStatus> accountStatuses = AccountStatus.List();
MessageBox.Show(accountStatuses.Count.ToString());
它成功添加了“实时”和“关闭”记录,但是当我尝试使用“执行查询时出错。可能的语法错误”查询 CSList 的计数时失败,“对象引用未设置为对象实例的 InnerException。 ”。
有人知道我在这里做错了什么吗?
编辑:我已经将 Vici.CoolStorage dll 换成了 Activa.CoolStorage dll(在 CodePlex找到,可以追溯到 2008 年),现在一切正常,所以它肯定与最新版本有关(Vici 是 1.5,Activa 是 1.2 )。旧版本似乎不支持 SQL 日志记录