#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]
(
[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 не сохраняет запись.
Ответ №1:
Одним из вариантов будет извлечение исходного объекта (того, который вы пытаетесь обновить), затем создание нового объекта с новыми значениями и обновление с помощью следующего кода:
context.Entry(originalEntity).CurrentValues.SetValues(newEntityWithNewValues);
и, конечно, сохраните ваши изменения.
Ответ №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();
}
Обратите внимание, что вызов Add или Attach для объекта, который уже отслеживается, также может использоваться для изменения состояния объекта. Например, вызов Attach для объекта, который в данный момент находится в состоянии Added, изменит его состояние на неизмененное.
взял это отсюда: http://msdn.microsoft.com/en-us/data/jj592676.aspx действительно хорошее объяснение того, что происходит
Ответ №3:
Похоже, у вас нет каких-либо фактических изменений в прикрепленной вами записи. Я подозреваю, что для того, чтобы что-либо было написано, вам либо нужно иметь объект в состоянии «Добавлено» (что приведет к вставке), либо «Измененная» запись должна иметь некоторые фактические изменения, а исходные значения должны ссылаться на существующую запись, которая будет изменена. Однако, как правило, при работе со ссылочными таблицами вы никогда не изменяете значения. Вы просто добавляете или удаляете записи ссылок.