Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 未生成实体框架查询_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc 未生成实体框架查询

Asp.net mvc 未生成实体框架查询,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有以下对象模型: [Table("APA_QuestionProduct")] public class QuestionProduct { [Key, ForeignKey("Question"), Column(Order=0)] public int QuestionID { get; set; } [ForeignKey("QuestionID")] public Question Question { get; set; } [Key, Fo

我有以下对象模型:

[Table("APA_QuestionProduct")]
public class QuestionProduct
{
    [Key, ForeignKey("Question"), Column(Order=0)]
    public int QuestionID { get; set; }
    [ForeignKey("QuestionID")]
    public Question Question { get; set; }

    [Key, ForeignKey("Product"), Column(Order=1)]
    public int ProductID { get; set; }
    [ForeignKey("ProductID")]
    public Product Product { get; set; }
}
表:

    USE [qbm]
GO

/****** Object:  Table [dbo].[APA_QuestionProduct]    Script Date: 5/21/2013 6:52:46 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[APA_QuestionProduct](
    [QuestionID] [int] NOT NULL,
    [ProductID] [int] NOT NULL,
 CONSTRAINT [PK_APA_QuestionProduct] PRIMARY KEY CLUSTERED 
(
    [QuestionID] ASC,
    [ProductID] 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

ALTER TABLE [dbo].[APA_QuestionProduct]  WITH CHECK ADD  CONSTRAINT [FK_APA_QuestionProduct_APA_Product] FOREIGN KEY([ProductID])
REFERENCES [dbo].[APA_Product] ([ProductID])
GO

ALTER TABLE [dbo].[APA_QuestionProduct] CHECK CONSTRAINT [FK_APA_QuestionProduct_APA_Product]
GO

ALTER TABLE [dbo].[APA_QuestionProduct]  WITH CHECK ADD  CONSTRAINT [FK_APA_QuestionProduct_APA_Question] FOREIGN KEY([QuestionID])
REFERENCES [dbo].[APA_Question] ([QuestionID])
GO

ALTER TABLE [dbo].[APA_QuestionProduct] CHECK CONSTRAINT [FK_APA_QuestionProduct_APA_Question]
GO
因此后面的表只有2个外键(也是主键)。我的问题对象有一个产品列表。当我更新ProductID外键并在上下文上调用“SaveChanges”时,数据库中不会生成任何查询/更新:

question.Products[1].ProductID = 4;                
db.Entry(question.Products[1]).State = EntityState.Modified;
db.SaveChanges();

我查看了InteliTrace以检查查询,但即使我的QuestionProduct对象发生了更改,也不会对我的QuestionProduct表调用任何查询。为什么不更新该表?不会引发任何错误。

您的实体
QuestionProduct
仅包含键属性,不包含其他标量属性。实体框架不允许更改(主)键属性

您必须删除旧的链接记录并创建新的链接记录以建立新关系,例如:

QuestionProduct oldProduct = question.Products[1];
QuestionProduct newProduct = new QuestionProduct
{
    QuestionID = question.QuestionID,
    ProductID = 4
};

db.QuestionProducts.Attach(oldProduct);
db.QuestionProducts.Remove(oldProduct);
db.QuestionProducts.Add(newProduct);

db.SaveChanges();
但你真的应该把它建模为多对多关系。您不需要
QuestionProduct
实体,并且可以拥有直接从
Question
引用到
Product
的集合,反之亦然,而无需通过中间实体导航

例如,它显示了它是如何工作的