我正在设计一个应用程序来跟踪运输情况。
我有四张桌子:
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不保存记录。
答案 0 :(得分:2)
您可以通过在其条目上设置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();
}
请注意,对已经跟踪的实体调用“添加”或“附加”也可用于更改实体状态。例如,为当前处于已添加状态的实体调用Attach将其状态更改为Unchanged。
从这里开始:http://msdn.microsoft.com/en-us/data/jj592676.aspx非常好地解释发生了什么
答案 1 :(得分:2)
一个选项是检索原始实体(您尝试更新的实体),然后使用新值创建一个新实体,并使用以下代码进行更新:
context.Entry(originalEntity).CurrentValues.SetValues(newEntityWithNewValues);
当然保存您的更改。
答案 2 :(得分:0)
您似乎没有对附加的记录进行任何实际修改。我怀疑为了编写任何内容,你要么必须在"添加" state(会导致插入),或者#34; Modified"记录需要进行一些实际修改,原始值必须引用要修改的现有记录。但是,通常在处理链接表时,您永远不会修改值。您只需添加或删除链接记录。