鉴于:
- 不能触及数据库模型(数据库由供应商提供;如果我们更改数据,我们将失去支持)
- 实体之间的所有关系都丢失了
通常,我们确实有一个包含 id、name... 的用户表和一个包含 id、user_id、amount... 由于在数据库级别没有关系, Entity Framework 不会将对象关联在一起,也无法使用如下结构:
transactions.Select(t=> new {t.id, t.user.name, t.amount})
有没有办法在 Entity Framework 中手动添加关系(模型优先)以便我们可以利用 Linq?
最佳答案
是的,这是可能的。
模型优先
在 edmx 设计器中,右键单击 > 添加新 > 关联。您将看到一个对话框,用于设置两个模型之间的关系:
代码优先
类似于以下模型设置的东西应该可以工作,即使数据库中没有关系:
public class User
{
public int UserId { get; set; }
[ForeignKey("UserId")]
public virtual ICollection<Transaction> Transactions { get; set; }
}
public class Transaction
{
public int TransactionId { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public User User { get; set; }
}
当您的模型以这种方式设置时,以下 LINQ:
transactions.Select(t=> new {t.id, t.user.name, t.amount});
然后应该是可能的,并且在运行时会被 EF 很好地转换成 SQL。
关于c# - 仅在代码中添加关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346868/