对于用于实体类型的linq to sql onloaded()分部方法,我找不到太多信息。我遇到了一个问题,这一定是因为我不了解该如何使用该方法,或者是我自己的一些其他监督。
我有一个聚合根帐户,它有一个类型为BalanceHistory的实体集合。我在类中定义了一个名为currentBalance的属性,该属性未映射到源表中的任何列。相反,我使用onloaded将其值设置为BalanceHistory集合中的最新条目。
partial void OnLoaded()
{
var balance = this.BalanceHistory
.OrderByDescending(b => b.Datestamp)
.First();
this.CurrentBalance = balance.Value;
}
BalanceHistory集合与帐户实体一起加载,即它不是延迟加载的。以下是我的DataContext类的加载选项。
public AccountRepository()
{
var connection = ConfigurationManager.ConnectionStrings["DbConnectionString"].ConnectionString;
this._dataContext = new DbDataContext(connection);
var options = new DataLoadOptions();
options.LoadWith<Account>(a => a.BalanceHistory);
this._dataContext.LoadOptions = options;
}
我遇到的问题是,每当我尝试从DataContext类中检索帐户对象时,都会收到一个InvalidOperationException,它说“sequence不包含任何元素”。但是,如果使用调试器并查看DataContext对象,我可以看到只缺少帐户对象。BalanceHistory集合中的所有Balance对象都在那里。但是,如果我注释了onloaded方法,那么将毫无错误地检索一组帐户(当然,不会填充currentBalance属性)。
所以我一定是做错了什么。有人有什么建议吗?除了弄清楚我做错了什么之外,我还想听听关于更好实现的任何想法。
谢谢!