我一直在寻找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),创建了一个Domain文件夹,并添加了以下两个类来映射到我的表:
AccountStatus:
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());
它成功添加了“Live”和“Closed”记录,但是当我尝试查询CSList的Count时出现“Error execution query。可能的语法错误”,InnerException“对象引用未设置为实例一个对象。“。
有人有任何想法我在这里错了吗?
编辑:我已经将Vici.CoolStorage dll换成了Activa.CoolStorage dlls(找到了here at CodePlex,可以追溯到2008年),现在一切正常,所以它绝对是做最新版本(Vici是1.5,Activa是1.2)。旧版本似乎不支持SQL日志记录