c# - 如何将数据保存为与 Entity Framework 的一对零或一对一的关系
问题描述
我有两个表,它们的关系为一到零或一,InvoiceSale
并且Budget
. 一张销售发票可以有Budget
(或没有),但每一张都Budget
属于一张销售发票。
这是我的InvoiceSale
课:
public class InvoiceSale
{
public int Id { get; set; }
public int NumberInvoice { get; set; }
public DateTime InvoiceSaleDate { get; set; }
public Budget Budget{ get; set; }
}
这是我的Budget
课:
public class Budget
{
public int Id { get; set; }
public byte StateId { get; set; }
public long Total { get; set; }
public InvoiceSale InvoiceSale { get; set; }
}
这是我对关系的 fluent API 配置:
HasOptional(fv => fv.Budget)
.WithOptionalDependent(p => p.InvoiceSale)
.Map(m => m.MapKey("BudgetId")); //I don't have a navigation property for
//this
当我从表单发送数据时,我发送BudgetId
下拉列表的值,但是当我尝试在 Entity Framework 中保存更改时,BudgetId
可选字段总是插入 null。
由于我没有导航属性BudgetId
,因此我不知道如何使用实体框架将此值发送到数据库。
这是插入数据的控制器操作:
[HttpPost]
public ActionResult CreateInvoiceSale(InvoiceSale newInvoiceSale)
{
var invoiceSale = new InvoiceSale
{
NumberInvoice = newInvoiceSale.NumberInvoice ,
InvoiceSaleDate = newInvoiceSale.InvoiceSaleDate ,
// Here I need to pass the BudgetId value, but how can I do it
// without a navigation property?
};
_context.InvoiceSales.Add(invoiceSale);
_context.SaveChanges();
return Json("ok"):
}
解决方案
在 InvoiceSale 实体中添加外键
public class InvoiceSale
{
public int Id { get; set; }
public int BudgetId { get; set; }
public int NumberInvoice { get; set; }
public DateTime InvoiceSaleDate { get; set; }
public Budget Budget { get; set; }
}
[HttpPost]
public ActionResult CreateInvoiceSale(InvoiceSale newInvoiceSale)
{
var invoiceSale = new InvoiceSale
{
BudgetId = newInvoiceSale.BudgetId,
NumberInvoice = newInvoiceSale.NumberInvoice,
InvoiceSaleDate = newInvoiceSale.InvoiceSaleDate,
//Here i need to pass the BudgetId value, but how can i do without a
//navigation property
};
_context.InvoiceSales.Add(invoiceSale);
_context.SaveChanges();
return Json("ok"):
}
需要在 InvoiceSale 表中赋值,使用这一行BudgetId = newInvoiceSale.BudgetId,
推荐阅读
- apache-kafka - 向Kafka中的主题发送消息时出错
- bash - 什么是“双 sh”电话?
- python - 如何从 VS Code 中的本地 python 包导入?
- mysql - 优化Mysql JOIN查询速度
- angular - 如何在角度应用程序中触发事件以进行单元测试?
- reactjs - 如何在本机反应中显示虚线
- c# - 如何统一安排父级下实例化预制件的顺序?
- jenkins - How to injecting jenkins variable to robot script report name
- css - 在 :global 和 :local css 模块之间切换,以使用 sass mixins 为元素设置动画
- javascript - 从数组中检索多个值的更简单方法