- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我遇到了一个奇怪的情况,
我收到此错误消息:
System.Data.Entity.Infrastructure.DbUpdateException: 'An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.'
InnerException:
OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.
我正在尝试使用 AJAX 和 .NET 构建纸牌游戏,
现在,我有一个 Method1 需要在 Room 实体中进行一些更改,这是该方法的完整代码:
public string OpenCards()
{
IsLogged = (System.Web.HttpContext.Current.User != null) && System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
if (IsLogged)
CurrentUser = db.Users.Find(User.Identity.GetUserId());
else
return "NotLoggedIn";
if (CurrentUser.CurrentRoom == null)
return "UserNotConnectedToRoom";
if (CurrentUser.CurrentRoom.Round == 0)
{
CurrentUser.CurrentRoom.SetAllPlayingThisRound(true);
// DELETE THE PREVIOUS CurrentUser.CurrentRoom.CardsDeck
CurrentUser.CurrentRoom.RemovePlayersCards(db);
if(CurrentUser.CurrentRoom.CardsDeck != null)
{
db.Cards.RemoveRange(CurrentUser.CurrentRoom.CardsDeck);
}
List<Card> list = RoomManager.FillDeck(CurrentUser.CurrentRoom);
CurrentUser.CurrentRoom.CardsDeck = list;
CurrentUser.CurrentRoom.SendCardsToPlayers();
db.SaveChanges(); // ERROR HAPPENS HERE
return "....";
}
return "";
}
我在执行以下操作时收到消息错误:db.SaveChanges()
基本上,从这段代码中需要知道的是我正在更改三个实体:ApplicationUser、Room 和 Cards。
现在,每隔几秒,就会调用Method2,它所做的基本上是显示来自数据库上下文的一些数据。
现在根据我在互联网上的阅读,出现此错误的原因有两个:
现在奇怪的是,这个错误并不是一直都在发生,而且我无法重现,也不知道为什么会发生。
所以在尝试修复它之前,我怎么知道这个错误的原因是 1. 还是 2.?我应该在 Debug模式下寻找什么?
编辑:
我的模型:
public class Card
{
public int CardId { get; set; }
public int Value { get; set; }
public string Type { get; set; }
}
public class Room
{
public int RoomId { get; set; }
public string Name { get; set; }
public int EnterPrice { get; set; }
public int UserDecisionTime { get; set; }
public virtual ICollection<Card> CardsDeck { get; set; }
public virtual ICollection<Card> CardsOnTable { get; set; }
public int WhosTurnChairIndex { get; set; }
public virtual ApplicationUser Chair0 { get; set; }
public virtual ApplicationUser Chair1 { get; set; }
public virtual ApplicationUser Chair2 { get; set; }
public virtual ApplicationUser Chair3 { get; set; }
public virtual ApplicationUser Chair4 { get; set; }
public int FirstRound { get; set; }
public int Round { get; set; }
}
还有一些来自SQL Server的卡片数据:
编辑:在@Train 建议在更改数据库的每一行之后执行 db.SaveChanges() 之后,我注意到我在这一行之后收到错误消息:
CurrentUser.CurrentRoom.SendCardsToPlayers();
方法是这样的:
public void SendCardsToPlayers()
{
for (int i = 0; i < 5; i++)
{
ApplicationUser user = (ApplicationUser)GetProperty(this, "Chair" + i);
if (user != null && user.IsPlayingThisRound == true && IsPlayerHasEnoughMoney(user))
{
Card c1 = CardsDeck.First();
CardsDeck.Remove(c1);
Card c2 = CardsDeck.First();
CardsDeck.Remove(c2);
user.CardOne = c1;
user.CardTwo = c2;
}
else if (user != null)
{
user.IsPlayingThisRound = false;
}
}
}
这个方法放在Room的实体中。
另一个注意:我试图删除以下行:CardsDeck.Remove(c1);和 CardsDeck.Remove(c2);
但还是报这个错。
所以问题在:Card c1 = CardsDeck.First();
可能是因为我不是从 CardsDeck.ToList() 制作的,所以会出现问题?
编辑:根据要求,FillDeck 的方法:
public static List<Card> FillDeck(Room room)
{
List<Card> list = new List<Card>();
string[] names = new string[]
{
"Club", "Diamond", "Heart", "Spade"
};
// Creating the Card deck
for(int i = 0; i < 13; i++)
{
for(int j = 0; j < 4; j++)
{
list.Add(new Card
{
Value = i,
Type = names[j]
});
}
}
list.Shuffle();
return list;
}
** 另一个注意事项:** 我发现如果删除与卡片相关的所有内容,它们是:
没有问题,请问是不是Card实体的问题?我想到的另一个解决方案是将 Card 制作成字符串(用逗号分隔)或者甚至是字符串中的 JSON,这样它可能会解决整个 Cards 问题?
最佳答案
很难判断缺少某些方法的代码发生了什么。这是我认为的问题所在。
您的 Card
实体具有属性
{
CardID: ... //Primary Key
value: ...
Type: ...
CurrentRoom... //is this a foreign Key?
...//other properties
}
但是当您创建它时,您只有 2 个属性。
list.Add(new Card
{
Value = i,
Type = names[j]
}); //no foriegn key or primary key defined
您不能对不完整的实体进行数据库操作。您还没有为卡片定义 Primary
和 foreign
键,然后当您执行所有数据库操作时,它不知道要对哪些卡片执行 crud 操作.
关于c# - ASP.NET db.savechange System.Data.Entity.Infrastructure.DbUpdateException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733174/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!