【问题标题】:How to set up foreign key in Entity Framework with data annotations?如何使用数据注释在实体框架中设置外键?
【发布时间】:2020-06-08 17:42:04
【问题描述】:

我正在尝试构建一个使用实体框架连接到 SQL Server 的 Web 应用程序。我有三个类,一个是注册咨询,第二个是注册联系信息,最后一个是分类咨询类型(有点像枚举但我需要存储更多数据)。

每个咨询都有一个联系信息(因此有一个对表Contact 的主键的引用)和一个ConsultationType(另一个对表Type 的主键的引用)。

public class Consultation
{
    [Key]
    public long id { get; set; }

    public long ContactID { get; set; }
    [ForeignKey("ContactID")]
    public Contact Contact { get; set; }

    public long ConsultationTypeID{ get; set; }
    [ForeignKey("ConsultationTypeID")]
    public ConsultationType Type { get; set; }
}

public class Contact
{
    public long id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

public class ConsultationType
{
    public long id { get; set; }
    public string type{ get; set; }
    public string abbreviated{ get; set; }
} 

Consultation 表有 3 列(idContactIDConsultationTypeID)。我希望根据外键中的 ID 自动填充所有 ContactConsultationType 引用。

目前,当我从数据库中检索数据时,只有ConsultationType 被填充,而不是联系人。我无法理解这种行为,因为我认为我的设置方式都相同。

编辑:当我检索Consultation 数据时,我得到一个包含 5 个属性(咨询 ID、联系人 ID、联系人、咨询类型 ID、咨询类型)的对象列表。其中4个已设置(仅联系人未设置)。我希望将联系人属性设置为包含联系人 ID 属性引用的 ID 的行的实例。

【问题讨论】:

  • 请尝试再次阅读您所写的内容。自动填写联系方式和咨询类型是什么意思。联系和咨询类型中必须有数据才能创建咨询,而不是相反。对不起,如果我理解错了
  • 你能展示你的 Select 方法吗?你添加了包含吗?
  • 当我检索咨询数据时,我得到一个包含 5 个属性(咨询 ID、联系人 ID、联系人、咨询类型 ID、咨询类型)的对象列表。其中4个已设置(仅联系人未设置)。我希望将联系人属性设置为包含联系人 ID 属性重新引用的 ID 的行的实例。
  • 对于select方法,我有一个DbContext,我只用这个函数Consultation = await _context.Consultations.ToListAsync();

标签: c# sql-server entity-framework


【解决方案1】:

重读选择部分。

consultationTypes = await _context.ConsultationTypes.ToListAsync();
Consultation = await _context.Consultations.ToListAsync();

我想也许我也应该加载联系人。所以我补充说:

await _context.ConsultationTypes.ToListAsync();
await _context.Contacts.ToListAsync();
Consultation = await _context.Consultations.ToListAsync();

我真的不明白为什么我需要这样做,但它现在正在工作。我想知道是否有办法加载所有表,所以我不必每次都这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2023-04-11
    • 2012-04-23
    • 2018-10-25
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多