我有一个Account
实体,我想在它上面有一个名为CurrentSubscription
的Subscription
属性。
public class Account
{
public int Id { get; set; }
public Subscription CurrentSubscription { get; set; }
}
public class Subscription
{
public int Id { get; set; }
public int AccountId { get; set; }
public Account Account { get; set; }
public DateTime Start { get; set; }
public DateTime? End { get; set; }
}
在现实中,给定的帐户可能有多个Subscription
行,但业务规则规定只有一行(或没有行)的EndDate
为null
(Account
的当前订阅)。在我的模型中,当我检索帐户时,我不关心其他行,因为我只关心当前的帐户。
我该如何告诉EF这样做呢?使用fluent API并不意味着在PropertyBuilder
上内置了任何东西,我发现的每个HasDefaultValueSql
示例都有像"GETDATE()"
这样的简单Sql
,而不是一些参数化的东西,这将需要(..where AccountId = ?
)。
所以我卡住了..。有什么想法吗?
发布于 2019-04-17 03:23:15
这在您的情况下应该是可行的:
public class Account
{
public int Id { get; set; }
//Collection automatically loaded by EF
public virtual List<Subscription> Subscriptions { get; set; }
// Returns Only (or none) subscription with null End date
public Subscription CurrentSubscription => Subscriptions.SingleOrDefault(r=>r.End == null);
}
如果在Subscription类(或Fluent -collection)上设置了适当的外键,实体框架会自动(延迟)加载Account.Subscriptions
API:
public class Subscription
{
public int Id { get; set; }
public int AccountId { get; set; }
[ForeignKey("AccountId")]
public Account Account { get; set; }
public DateTime Start { get; set; }
public DateTime? End { get; set; }
}
https://stackoverflow.com/questions/55715131
复制相似问题