我有一个实体框架核心的问题。我有2个模型:category.cs
public int Id { get; set; }
[DisplayName("Category | ")]
[Required(ErrorMessage = "Category Name is Required")]
public string CategoryName { get; set; }
和LibraryItem.cs
public int Id { get; set; }
[DisplayName("Category Id")]
[Required(ErrorMessage = "Category Id is Required")]
public int CategoryId { get; set; }
public Category Category { get; set; }
[Required(ErrorMessage = "Title is Required")]
public string Title { get; set; }
[DisplayName("Author, Speaker or Director")]
[Required(ErrorMessage = "Creator of the media is required")]
public string Author { get; set; }
public int? Pages { get; set; }
[DisplayName("DVD or Audiobook Length")]
public int? RunTimeMinutes { get; set; }
[DisplayName("Available to borrow")]
public bool IsBorrowable { get; set; }
[DisplayName("Name of Borrower")]
public string Borrower { get; set; }
[DisplayName("Date of the Borrow")]
public DateTime? date { get; set; }
[DisplayName("Type of Media")]
[Required(ErrorMessage = "Type of Media is Required")]
public string Type { get; set; }
LibraryItem有一个外键CategoryId,它是Category表的主键。我想用相同的外键添加两个项目。所以这两个项目属于同一类别。但当我尝试添加具有相同CategoryId的另一个时,会出现以下错误
cannot insert duplicate key row in object
有人知道是什么导致了这个问题吗?多谢!
您必须通过在每个类上添加导航属性,让EF知道这两个实体以一对多的关系相关:
public class Category {
...
public virtual ICollection<LibraryItem> LibraryItems {get; set;}
}
public class LibraryItem {
...
[DisplayName("Category Id")]
[Required(ErrorMessage = "Category Id is Required")]
public int CategoryId { get; set; }
public Category Category { get; set; }
}
如果添加了导航属性,则可以使用Fluent API手动配置DbContext的OnModelCreating方法中的关系
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<LibraryItem>()
.HasOne(l => l.Category)
.WithMany(c => c.LibraryItems);
}
问题是您创建了一对一的关系,但您需要一对多
您必须修复您的类别类:
public int Id { get; set; }
[DisplayName("Category | ")]
[Required(ErrorMessage = "Category Name is Required")]
public string CategoryName { get; set; }
[InverseProperty(nameof(Library.Category))]
public virtual ICollection<LibraryItem> LibraryItems {get; set:}
修复后,您将不得不再次进行迁移
我正在使用Envers来审核表,但它正在为未知/不存在的表创建一些审核表。它看起来像多对一关系的多对多关系审计表。 这是对的吗?如果是,为什么? 但当我尝试删除和HorarioFixo时,我遇到了一个错误。 我收到的错误: 这是SQL重复: 所有这些都是代码的一部分。如果你需要更多,请留下评论。 我的班级: 我的映射: 新罕布什尔州和恩维尔斯配置:
我定义了2个具有单向一对多关系的实体: 在command.class中: 在StockDetails.class中: null
问题内容: 我了解存在和。但是,当有重复的键时,我想对临时表进行操作,以记录已违反的唯一键的记录,以便将其输出给用户。 有什么办法可以做吗?如果有帮助,我正在尝试进行批量插入。 问题答案: 使用,您不能插入到另一个表中-也没有可用的替代功能。 您可以通过两种自定义/替代方式来实现此目的: 使用对此问题的可接受答案中概述的:将MySQL ON DUPLICATE KEY插入到审计表或日志表中 创建一
但显然没多大意义,不是吗?大多数实现可能使用hashtable,所以无论如何都要重写它。
我的意图是创建4个Emp对象。2个对象(e1和e2)具有相同的哈希代码。因此,当插入e1(插入在e2之后)时,hashmap会意识到具有相同哈希值的对象已经存在(对象e2)。然后它会将槽中所有对象的键与相同的哈希值进行比较。如果它找到一个具有匹配键的对象(通过调用下面Emp类的equals方法),它将用新值替换旧值。 下面请看一下测试代码: 我期望的输出:替换的记录名称:Terry,年龄:60名称
问题内容: 关于create table命令上的重复键,我收到1022错误。看完查询后,我不知道在哪里进行复制。有人可以看到吗? 问题答案: 您很可能已经在名称或数据库中具有约束。如果是这样,只需重命名约束即可。 约束对于整个数据库必须是唯一的,而不仅仅是对要创建/更改的特定表。 要找出约束当前在哪里使用,可以使用以下查询: