C# 实体框架编辑多对多表
我正在设计一个应用程序,将是表,以保持运输跟踪 我有四张桌子:C# 实体框架编辑多对多表,c#,entity-framework,C#,Entity Framework,我正在设计一个应用程序,将是表,以保持运输跟踪 我有四张桌子: CREATE TABLE [dbo].[Trips] ( [TripID] INT NOT NULL PRIMARY KEY IDENTITY, ... ) CREATE TABLE [dbo].[Drivers] ( [DriverID] INT NOT NULL PRIMARY KEY IDENTITY, ... ) CREATE TABLE [dbo].[Vehicles] ( [Veh
CREATE TABLE [dbo].[Trips]
(
[TripID] INT NOT NULL PRIMARY KEY IDENTITY,
...
)
CREATE TABLE [dbo].[Drivers]
(
[DriverID] INT NOT NULL PRIMARY KEY IDENTITY,
...
)
CREATE TABLE [dbo].[Vehicles]
(
[VehicleID] INT NOT NULL PRIMARY KEY IDENTITY,
...
)
And one table called VehicleTrip
CREATE TABLE [dbo].[VehicleTrip]
(
[TripID] INT NOT NULL ,
[VehicleID] INT NOT NULL,
[DriverID] INT NOT NULL,
PRIMARY KEY ([TripID], [VehicleID], [DriverID]),
CONSTRAINT [FK_TripIDs_Trips] FOREIGN KEY (TripID) REFERENCES Trips(TripID),
CONSTRAINT [FK_VechicleID_Vehicles] FOREIGN KEY (VehicleID) REFERENCES Vehicles(VehicleID),
CONSTRAINT [FK_DriverID_DriverID] FOREIGN KEY (DriverID) REFERENCES Drivers(DriverID)
)
使用EF,我试图在VehicleTrip中编辑一条记录
public class TripVM
{
public int TripID { get; set; }
public int VehicleID { get; set; }
public int DriverID { get; set; }
//Other fields
public void InsertUpdate()
{
var vehicletrip = new StudentTransportation.Data.Model.VehicleTrip
{
//Uses the classes values to create the new object
TripID = TripID,
VehicleID = VehicleID,
DriverID = VehicleID
};
context.VehicleTrip.Attach(vehicletrip);
context.Entry(vehicletrip).State = EntityState.Modified;
context.SaveChanges();
}
但是,EF似乎没有保存记录。您似乎没有对附加的记录进行任何实际修改。我怀疑,为了编写任何内容,您必须使实体处于“添加”状态(这将导致插入),或者“修改”记录需要进行一些实际修改,并且原始值必须引用将要修改的现有记录。但是,通常在处理链接表时,从不修改值。您只需添加或删除链接记录。您似乎对附加的记录没有任何实际修改。我怀疑,为了编写任何内容,您必须使实体处于“添加”状态(这将导致插入),或者“修改”记录需要进行一些实际修改,并且原始值必须引用将要修改的现有记录。但是,通常在处理链接表时,从不修改值。您只需添加或删除链接记录。您可以通过在其条目上设置state属性来更改已被跟踪的实体的状态。例如:
var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };
using (var context = new BloggingContext())
{
context.Blogs.Attach(existingBlog);
context.Entry(existingBlog).State = EntityState.Unchanged;
// Do some more work...
context.SaveChanges();
}
请注意,为已跟踪的实体调用Add或Attach也可用于更改实体状态。例如,为当前处于添加状态的实体调用Attach将使其状态更改为Unchanged
从这里开始:非常好地解释了正在发生的事情您可以通过在条目上设置state属性来更改已经被跟踪的实体的状态。例如:
var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };
using (var context = new BloggingContext())
{
context.Blogs.Attach(existingBlog);
context.Entry(existingBlog).State = EntityState.Unchanged;
// Do some more work...
context.SaveChanges();
}
请注意,为已跟踪的实体调用Add或Attach也可用于更改实体状态。例如,为当前处于添加状态的实体调用Attach将使其状态更改为Unchanged
从这里开始:对于正在发生的事情,一个很好的解释是检索原始实体(您正在尝试更新的实体),然后使用新值创建一个新实体,并使用以下代码进行更新:
context.Entry(originalEntity).CurrentValues.SetValues(newEntityWithNewValues);
当然,保存您的更改。一个选项是检索原始实体(您正在尝试更新的实体),然后使用新值创建一个新实体,并使用以下代码进行更新:
context.Entry(originalEntity).CurrentValues.SetValues(newEntityWithNewValues);
当然,保存您的更改