C# 使用LINQ to SQL OnLoaded()方法会导致聚合根的空序列吗?
我找不到关于用于实体类型的LINQ to SQL OnLoaded()分部方法的太多信息。我遇到了一个问题,这一定是因为我不了解该方法应该如何使用,或者是我的一些其他疏忽 我有一个聚合根Account,它有一个Balance类型的实体集合,称为BalanceHistory。我在类中定义了一个名为CurrentBalance的属性,该属性未映射到源表中的任何列。相反,我使用OnLoaded将其值设置为BalanceHistory集合中的最新条目C# 使用LINQ to SQL OnLoaded()方法会导致聚合根的空序列吗?,c#,C#,我找不到关于用于实体类型的LINQ to SQL OnLoaded()分部方法的太多信息。我遇到了一个问题,这一定是因为我不了解该方法应该如何使用,或者是我的一些其他疏忽 我有一个聚合根Account,它有一个Balance类型的实体集合,称为BalanceHistory。我在类中定义了一个名为CurrentBalance的属性,该属性未映射到源表中的任何列。相反,我使用OnLoaded将其值设置为BalanceHistory集合中的最新条目 partial void OnLoaded() {
partial void OnLoaded()
{
var balance = this.BalanceHistory
.OrderByDescending(b => b.Datestamp)
.First();
this.CurrentBalance = balance.Value;
}
BalanceHistory集合与Account实体一起加载,即它不是延迟加载的。下面是我的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;
}
publiccountrepository()
{
var connection=ConfigurationManager.ConnectionString[“DbConnectionString”].ConnectionString;
此._dataContext=new DbDataContext(连接);
var options=new DataLoadOptions();
options.LoadWith(a=>a.BalanceHistory);
这。_dataContext.LoadOptions=options;
}
我遇到的问题是,每当我尝试从DataContext类检索Account对象时,我都会收到一个InvalidOperationException,它说“序列不包含元素”。但是,如果我使用调试器并查看DataContext对象,我可以看到只有Account对象丢失。BalanceHistory集合中的所有余额对象都存在。但是,如果我注释掉OnLoaded方法,则将检索帐户集而不会出错(当然,不会填充CurrentBalance属性)
所以我一定是做错了什么。有人有什么建议吗?除了找出我做错了什么,我还想听听关于更好实现的想法
谢谢 假定CurrentBalance是在分部类实现中添加的属性。在这种情况下,我将在第一次调用属性时计算它,而不是在加载父对象时填充它
private decimal? currentBalance;
public decimal CurrentBalance
{
get
{
if (!this.currentBalance.HasValue)
{
var balance = this.BalanceHistory
.OrderByDescending(b => b.Datestamp)
.FirstOrDefault();
this.currentBalance = balance == null ? 0M : balance.Value;
}
return this.currentBalance.Value;
}
}
谢谢你的建议,我更喜欢你的方法。