[英]Entity Framework Error: The field “ForeignKey” is required EF
我有一個實體設置如下
public class ExampleObject
{
[Key]
public int ID { get; set; }
public int RelationID { get; set; }
public string SomeValue { get; set; }
[ForeignKey("RelationID")]
public virtual RelationObj RelationObj { get; set; }
}
稍后在我的項目中,我使用此實體如下
foreach (var rec in allRecs)
{
db.ExampleObject.Attach(rec);
rec.SomeValue = "TEST"
}
db.SaveChanges();
拋出DbEntityValidationException“字段”RelationObj“是必需的”
我不想在加載這些記錄時包含RelationObj,這會影響性能。 為什么EF打擾檢查外來關系對象? 我該如何解決這個問題?
首先創建數據庫,在腳本之上更改數據庫以匹配您的數據庫
USE [Breaz]
GO
/****** Object: Table [dbo].[Relation] Script Date: 6/29/2016 4:35:32 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Relation](
[ID] [int] IDENTITY(1,1) NOT NULL,
[RelatedSomeValue] [varchar](10) NULL,
CONSTRAINT [PK_Relation] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
然后創建下一個表,再次更改db(Breaz):
USE [Breaz]
GO
/****** Object: Table [dbo].[Example] Script Date: 6/29/2016 4:34:15 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Example](
[ID] [int] IDENTITY(1,1) NOT NULL,
[RelationID] [int] NOT NULL,
[SomeValue] [varchar](10) NULL,
CONSTRAINT [PK_Example] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Example] WITH CHECK ADD CONSTRAINT [FK_Example_Relation] FOREIGN KEY([RelationID])
REFERENCES [dbo].[Relation] ([ID])
GO
ALTER TABLE [dbo].[Example] CHECK CONSTRAINT [FK_Example_Relation]
GO
在每個表中添加幾行數據。
從您的數據庫添加新項ADO.NET實體數據模型並添加兩個表。 將edmx命名為ExampleModel。 從Example.Context.cs文件中獲取(BreazEntities7)上下文(您的上下文)。
public class HomeController : Controller
{
public ActionResult YIndex()
{
using (BreazEntities7 db = new BreazEntities7())
{
var allRecs = db.Examples;
foreach (var rec in allRecs)
{
rec.SomeValue = "TEST";
}
db.SaveChanges();
}
return View();
}
這是生成的示例:
namespace Testy2.Models
{
using System;
using System.Collections.Generic;
public partial class Example
{
public int ID { get; set; }
public int RelationID { get; set; }
public string SomeValue { get; set; }
public virtual Relation Relation { get; set; }
}
}
在這里id生成的Relation:
namespace Testy2.Models
{
using System;
using System.Collections.Generic;
public partial class Relation
{
public Relation()
{
this.Examples = new HashSet<Example>();
}
public int ID { get; set; }
public string RelatedSomeValue { get; set; }
public virtual ICollection<Example> Examples { get; set; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.