1

我一直在寻找 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 日志记录

4

0 回答 0