将Entity-Framework-6与MVC-5和Identity-framework-2结合使用。我想从第一个种子中找到主键,并将找到的密钥插入到第二个种子中。我使用多个条件来查找密钥,但不知何故我的Lambda表达式无法工作或未正确编写。
我遗漏了什么?
查看此处: /migrations/configurations.cs
我将使用这个示例https://stackoverflow.com/a/24936095/2910930作为其余seed的基础。
protected override void Seed(ApplicationDbContext context)
{
bool itWorks = WriteReferenceData(context);
base.Seed(context);
}
private bool WriteReferenceData(ApplicationDbContext ctx)
{
DbContextTransaction transaction = null;
bool succeeded = false;
try
{
transaction = ctx.Database.BeginTransaction();
CreateDetails(ctx);
CreateRooms(ctx);
ctx.SaveChanges();
transaction.Commit();
succeeded = true;
}
catch (Exception ex)
{
if (transaction != null) { transaction.Rollback(); transaction.Dispose(); }
succeeded = false;
}
return succeeded;
}在第一个种子,我将插入多个记录,主键是DB生成的。当我运行这个方法时,记录被正确插入并生成PK。
// FIRST SEED
private void CreateDetails(ApplicationDbContext ctx)
{
var Details = new List<Detail>
{
new Detail { MaxUsers = 1, RoomName = "WorkRoom"},
new Detail { MaxUsers = 2, RoomName = "WorkRoom"},
new Detail { MaxUsers = 3, RoomName = "PlayRoom"}
};
Details.ForEach(s => ctx.Detail.AddOrUpdate(p => p.DetailID, s));
ctx.SaveChanges();
}
// SECOND SEED
private void CreateRooms(ApplicationDbContext ctx)
{
// THIS IS NOT WORKING CORRECTLY
Int16 ID = ctx.Detail
.Single(x =>
x.RoomName == "WorkRoom" &&
x.MaxUsers == 2).DetailID;
var Rooms = new List<Room>
{
// 1 person
new Room { RoomID = "X-16", DetailID = ID}
new Room { RoomID = "X-17", DetailID = ID}
};
Rooms.ForEach(s => ctx.Room.AddOrUpdate(p => p.RoomID, s));
ctx.SaveChanges();
}发布于 2014-09-13 03:23:54
在阅读了大量关于linq和Lambda的内容之后,答案比我想的要简单得多。
var detail = ctx.Detail.Where(x => x.DetailRoomName == "Patientroom" && x.MaxUsers == 1);
int detailID = detail.Single().DetailID;
var Rooms = new List<Room>
{
// 1 person
new Room { RoomID = "X-16", DetailID = detailID }
new Room { RoomID = "X-17", DetailID = detailID }
};https://stackoverflow.com/questions/25258601
复制相似问题