gpt4 book ai didi

c# - 如何通过外键引用访问表数据?

转载 作者:行者123 更新时间:2023-11-29 11:38:07 25 4
gpt4 key购买 nike

我的一个实体中有一个语句,它使用外键返回 IEnumerable<CustomField> .

我在我的存储库中使用了 LINQ 来测试以下方法,看看它是否有效。但是当我在实体中使用外键引用时,它返回 null。我在这里错过了什么吗?如何使用外键来访问另一个实体中的数据。

发票实体:

[Table("vwinvoice")]
public class Invoice
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int Sys_InvoiceID { get; set; }
[DisplayName("Inc.In Turnover")]
public bool Turnover { get; set; }
public int FK_StatusID { get; set; }
[DisplayName("Invoice No.")]
public string InvoiceNumber { get; set; }
[DisplayName("Invoice Date")]
public DateTime InvoiceDate { get; set; }
[DisplayName("Document Type")]
public string DocType { get; set; }
[DisplayName("Supplier Invoice No.")]
[Column("SupplierInvoiceNumber")]
public string SuppInvNumber { get; set; }
public int FK_SupplierID { get; set; }
[DisplayName("Account Number")]
public string AccountNumber { get; set; }
[DisplayName("Order Number")]
public string OrderNumber { get; set; }
[DisplayName("Order Date")]
public DateTime? OrderDate { get; set; }
[DisplayName("Currency Code_Doc")]
public string CurrencyCode_Doc { get; set; }
[DisplayName("Net Amount_Doc")]
public decimal? NetAmount_Doc { get; set; }
[DisplayName("VAT Amount_Doc")]
public decimal? VATAmount_Doc { get; set; }
[DisplayName("Gross Amount_Doc")]
[Required]
public decimal? GrossAmount_Doc { get; set; }
[DisplayName("Currency Code_Home")]
public string CurrencyCode_Home { get; set; }
[DisplayName("Net Amount_Home")]
public decimal? NetAmount_Home { get; set; }
[DisplayName("VAT Amount_Home")]
public decimal? VATAmount_Home { get; set; }
[DisplayName("Gross Amount_Home")]
public decimal? GrossAmount_Home { get; set; }
[DisplayName("Payment Reference")]
public string PaymentReference { get; set; }
[DisplayName("Supplier")]
public string AccountName { get; set; }
[DisplayName("Status")]
public string StatusName { get; set; }
[DisplayName("Auditor Comments")]
public string AuditorComments { get; set; }
[DisplayName("Reviewer Comments")]
public string ReviewerComments { get; set; }
[DisplayName("Data Source")]
[Required]
public string DataOrigin { get; set; }
public int DetailLineCount { get; set; }

public IEnumerable<CustomField> ClientData {
get {
//Use the CustomFields foreign key to gain access to the data returns null.
return GetCustomFieldData(this.CustomFields.Select(r => r));
}
}

private IEnumerable<CustomField> GetCustomFieldData(IEnumerable<Entities.CustomFields> enumerable) {
return (from f in enumerable
select new CustomField {
Name = f.FK_CustomHeader,
Value = f.Value
});
}

//Custom Field Additions
public virtual ICollection<CustomFields> CustomFields { get; set; }
}

CustomFields实体:

[Table("tblCustomFields")]
public class CustomFields
{
[Key]
public int ID { get; set; }

public int? FK_SysInvoiceID { get; set; }

[StringLength(255)]
public string FK_CustomHeader { get; set; }

[StringLength(255)]
public string Value { get; set; }

public virtual Invoice Invoices { get; set; }

public virtual CustomFieldHeaders CustomFieldHeaders { get; set; }
}

我也无法在 get 语句中放置断点来查看会发生什么,这是为什么?每当我尝试返回发票列表时,它都会跳过断点,可以在此处看到:

public IQueryable<Invoice> Invoices 
{
get
{
var x = _ctx.Invoices.ToList();
return _ctx.Invoices;
}
}

最佳答案

声明 CustomFields 属性时,您使用了 virtual 关键字。因此它将是延迟加载的。如果您希望从存储库返回后填充该属性,则需要在方法中显式包含该表:

var x = _ctx.Invoices.Include(i => i.CustomFields).ToList();
return _ctx.Invoices;

或者,您可以删除 virtual 关键字,该属性将始终被填充,从而导致数据库连接的性能受到影响,并且每当您访问发票时都会返回额外的数据>.

关于c# - 如何通过外键引用访问表数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com