Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ to SQL OnLoaded()方法会导致聚合根的空序列吗?_C# - Fatal编程技术网

C# 使用LINQ to SQL OnLoaded()方法会导致聚合根的空序列吗?

C# 使用LINQ to SQL OnLoaded()方法会导致聚合根的空序列吗?,c#,C#,我找不到关于用于实体类型的LINQ to SQL OnLoaded()分部方法的太多信息。我遇到了一个问题,这一定是因为我不了解该方法应该如何使用,或者是我的一些其他疏忽 我有一个聚合根Account,它有一个Balance类型的实体集合,称为BalanceHistory。我在类中定义了一个名为CurrentBalance的属性,该属性未映射到源表中的任何列。相反,我使用OnLoaded将其值设置为BalanceHistory集合中的最新条目 partial void OnLoaded() {

我找不到关于用于实体类型的LINQ to SQL OnLoaded()分部方法的太多信息。我遇到了一个问题,这一定是因为我不了解该方法应该如何使用,或者是我的一些其他疏忽

我有一个聚合根Account,它有一个Balance类型的实体集合,称为BalanceHistory。我在类中定义了一个名为CurrentBalance的属性,该属性未映射到源表中的任何列。相反,我使用OnLoaded将其值设置为BalanceHistory集合中的最新条目

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;
    }
}

谢谢你的建议,我更喜欢你的方法。