c# - 仅在代码中添加关系

标签 c# linq entity-framework

鉴于:

  • 不能触及数据库模型(数据库由供应商提供;如果我们更改数据,我们将失去支持)
  • 实体之间的所有关系都丢失了

通常,我们确实有一个包含 id、name... 的用户表和一个包含 id、user_id、amount... 由于在数据库级别没有关系, Entity Framework 不会将对象关联在一起,也无法使用如下结构:

transactions.Select(t=> new {t.id, t.user.name, t.amount})

有没有办法在 Entity Framework 中手动添加关系(模型优先)以便我们可以利用 Linq?

最佳答案

是的,这是可能的。

模型优先

在 edmx 设计器中,右键单击 > 添加新 > 关联。您将看到一个对话框,用于设置两个模型之间的关系:

enter image description here

代码优先

类似于以下模型设置的东西应该可以工作,即使数据库中没有关系:

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/

相关文章:

c# - Asp.net Web Api 2 - 如何从 C# 代码获取 access_token

c# - 删除按钮边框窗体

c# - GPU 内核中的指针和位运算符

visual-studio - 在 Vs 2008 和 2010 中使用 Entity Framework 有什么区别

c# - LINQ 包括多个 child

c# - 处理/清理网络服务代理

查找时间跨度的最大均值的 LINQ 查询

c# - 使用字符串通过 DbContext 访问表

c# - List.Foreach 在 Using block 中使用一次性项目

c# - 模型验证异常 : Name 'AnonymousUID' cannot be used in type 'CodeFirstDatabaseSchema.AnonymousUID'