Я работаю над несколько простым приложением InventoryTracker MVC5, в котором у меня возникают некоторые проблемы с получением моей LocalDatabase до Seed()
.MVC EntityFramework Code-First Migrations - Seed() Ошибка с DbUpdateException?
Когда я бегу update-database
команду на моем коде ниже, я получаю исключение следующим образом на линии context.INV_Types.AddRange(invTypes)
:
An exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll but was not handled in user code. Additional information: An error occurred while updating the entries. See the inner exception for details.
Внутренняя Exception: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated.
КОД:
internal sealed class Configuration : DbMigrationsConfiguration<InventoryTracker.DAL.InventoryTrackerContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(InventoryTracker.DAL.InventoryTrackerContext context)
{
if (System.Diagnostics.Debugger.IsAttached == false)
{
System.Diagnostics.Debugger.Launch();
}
List<INV_Locations> invLocs = getLocations();
context.INV_Locations.AddRange(invLocs);
List<INV_Manufacturers> invManufacturers = getManufacturers();
context.INV_Manufacturers.AddRange(invManufacturers);
List<INV_Models> invModels = getModels();
context.INV_Models.AddRange(invModels);
List<INV_Statuses> invStatuses = getStatuses();
context.INV_Statuses.AddRange(invStatuses);
List<INV_Types> invTypes = getTypes();
context.INV_Types.AddRange(invTypes); // EXCEPTION?
List<INV_Vendors> invVendors = getVendors();
context.INV_Vendors.AddRange(invVendors);
context.SaveChanges(); // Was told I needed to Save the other seeds before the Assets to ensure primary keys are created in the other tables?
List<INV_Assets> invAssets = getAssets();
context.INV_Assets.AddRange(invAssets);
context.SaveChanges();
}
private List<INV_Types> getTypes()
{
List<INV_Types> testTypes = new List<INV_Types>
{
new INV_Types
{
Id = 1,
type_description = "Server",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Types
{
Id = 2,
type_description = "IP Phone",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Types
{
Id = 3,
type_description = "Monitor",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testTypes;
}
private List<INV_Assets> getAssets()
{
List<INV_Assets> testAssets = new List<INV_Assets>
{
new INV_Assets
{
Id = 1,
ip_address = "10.10.135.38",
mac_address = "10.10.177.44",
note = "",
owner = "John Smith",
cost = 35,
po_number = "G348",
invoice_number = 1447,
serial_number = "JX14582Y",
asset_tag_number = "293548195023",
//acquired_date = Convert.ToDateTime(10212014),
acquired_date = DateTime.ParseExact("10212014", "MMddyyyy", CultureInfo.InvariantCulture),
disposed_date = null,
created_by = "Admin",
created_date = DateTime.Now,
Location_Id = 1,
Manufacturer_Id = 1,
Model_Id = 1,
Status_Id = 2,
Type_Id = 3,
Vendor_Id = 3
}
};
return testAssets;
}
У кого-нибудь есть идеи относительно того, что может быть причиной этого в структуре моего Seed()
для INV_Types
?
Я думал, что это может быть что-то, где мне нужно, чтобы сохранить изменения в контексте до getTYpes()
, но добавление context.SaveChanges()
после .AddRange(invStatuses)
приводит только к одной и той же ошибки с этим новым context.SaveChanges()
??
Я включил мои другие методы семенных ниже, чтобы помочь, если кто-то видит меня с видом:
#region Seed Locations
private List<INV_Locations> getLocations()
{
List<INV_Locations> testLocations = new List<INV_Locations>
{
new INV_Locations
{
Id = 1,
location_dept = "IT",
location_room = "Server",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Locations
{
Id = 2,
location_dept = "Break Room",
location_room = "Kitchen",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Locations
{
Id = 3,
location_dept = "Accounting",
location_room = "Conference",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testLocations;
}
#endregion
#region Seed Manufacturers
private List<INV_Manufacturers> getManufacturers()
{
List<INV_Manufacturers> testManufacturers = new List<INV_Manufacturers>
{
new INV_Manufacturers
{
Id = 1,
manufacturer_description = "Samsung",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Manufacturers
{
Id = 2,
manufacturer_description = "MITEL",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Manufacturers
{
Id = 3,
manufacturer_description = "Oracle",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testManufacturers;
}
#endregion
#region Seed Models
private List<INV_Models> getModels()
{
List<INV_Models> testModels = new List<INV_Models>
{
new INV_Models
{
Id = 1,
model_description = "XTERAV12",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Models
{
Id = 2,
model_description = "5330",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Models
{
Id = 3,
model_description = "Sunblade 6000",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testModels;
}
#endregion
#region Seed Statuses
private List<INV_Statuses> getStatuses()
{
List<INV_Statuses> testStatuses = new List<INV_Statuses>
{
new INV_Statuses
{
Id = 1,
status_description = "AVAILABLE",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Statuses
{
Id = 2,
status_description = "SIGNEDOUT",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Statuses
{
Id = 3,
status_description = "RECYCLED",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Statuses
{
Id = 4,
status_description = "AUCTIONED",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testStatuses;
}
#endregion
#region Seed Types
private List<INV_Types> getTypes()
{
List<INV_Types> testTypes = new List<INV_Types>
{
new INV_Types
{
Id = 1,
type_description = "Server",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Types
{
Id = 2,
type_description = "IP Phone",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Types
{
Id = 3,
type_description = "Monitor",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testTypes;
}
#endregion
#region Seed Vendors
private List<INV_Vendors> getVendors()
{
List<INV_Vendors> testVendors = new List<INV_Vendors>
{
new INV_Vendors
{
Id = 1,
vendor_name = "Oracle",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Vendors
{
Id = 2,
vendor_name = "Centriq",
created_by = "Admin",
created_date = DateTime.Now
},
new INV_Vendors
{
Id = 3,
vendor_name = "Samsung",
created_by = "Admin",
created_date = DateTime.Now
}
};
return testVendors;
}
#endregion
EDIT:
Как IronMan84 указывал, я по ошибке копирования -pasted, где у меня было несколько экземпляров каждого объекта с тем же значением Id
(например, 1, 2, 1 вместо 1, 2, 3). Однако ошибка все еще сохраняющаяся только теперь в следующей строке:
context.INV_Vendors.AddRange(invVendors);
context.SaveChanges(); // DbUpdateException!
List<INV_Assets> invAssets = getAssets();
edit2: Добавлена Внутренней Exception детали к ошибке первоначально в списке. The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated
.
EDIT3: Для того, чтобы лучше диагностировать проблему, я попытался добавить context.SaveChanges()
после каждого из .AddRange()
вызовов, но самый первый экземпляр после context.INV_Locations.AddRange(invLocs)
результатов в той же ошибки:
An exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll but was not handled in user code. Additional information: An error occurred while updating the entries. See the inner exception for details.
Внутренняя Exception: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated.
Я могу только представить, что это ссылка на мой getLocations()
, устанавливающий [created_date]
значение DateTime.Now
, но я не уверен, в чем проблема?
В моей модели я определил свойство, как:
[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime created_date { get; set; }
Что говорит внутреннее исключение? – tschmit007