【问题标题】:How to add navigation property manually model first如何先手动添加导航属性模型
【发布时间】:2016-12-27 18:45:45
【问题描述】:

我有一个带有书籍的表格和一个带有模型优先创建的作者的表格。 Books 表中有一个导航属性指向 AuthorID (因为每本书都有一个作者) 在这里,我试图用值填充表格,归结为标量属性也没关系。但是如何为导航属性添加值? 我的导航属性叫做 AuthorBook

 Book book1 = new Book();
 Author author1 = new Author();
author1.Surname = "Dickens";
 author1.Name = "Charles";
 db.AuthorSet.Add(author1);`
hbook1.Title = "Great Expectations";
book1.Genre = "Novel"
db.BookSet.Add(book1);
 db.SaveChanges();

'

【问题讨论】:

  • 不应该给作者预定 * -> *?
  • @AluanHaddad 你是什么意思?
  • 这些书籍通常可以有多个作者。不过可能不在您的域中。

标签: c# entity-framework navigation-properties ef-model-first


【解决方案1】:

试试这样的:

var rel = new AuthorBook { Book = book1, Author = author1 };
book1.AuthorBook.Add(rel);

这显然早于SaveChanges();

【讨论】:

  • 以及如何填写另一个导航属性?连接是一对多 在一个位置有很多书我已经创建了位置Location location1 = new Location(); location1.Floor = "2"; location1.Cupboard = "3"; location1.Section = "1"; location1.Shelf = "2"; location1.Row = "1"; db.LocationSet.Add(location1); 我尝试按照您建议编写 AuthorBook 的相同方式填写位置,但 Visual Studio 用红色下划线。而且AuthorBook也没有下划线,很好
  • 如果该位置存在,您需要先选择它,然后将其添加到书中(作为作者)。
  • 但是我无法通过编写与作者相同的代码来添加它
  • var location = db.Locations.Where(x => x.Floor == 地板 && x.Cupboard == 橱柜 && ...).SingleOrDefault(); if (location == null) location = new Location { Floor = floor, Cupboard = cupboard, ... }; book1.Location = 位置;
  • 我添加了您建议的代码(但位置而不是位置),它说它无法解析符号位置
【解决方案2】:
Book book1 = new Book();
book1.Title = "Great Expectations";
book1.Genre = "Novel"

// Add 1 or more authors
Author author1 = new Author();
author1.Surname = "Dickens";
author1.Name = "Charles";

// AuthorBook better be a collection since a book can have 1 or many authors
book1.AuthorBook.Add(author1); 

db.BookSet.Add(book1);
db.SaveChanges();

以上代码将在Book 表中创建一条记录,在Author 中创建一条记录,在AuthorBook 中创建一条记录。您无需手动将代码中的项目添加到 AuthorBook,因为 EF 会为您处理。

【讨论】:

  • 不,如果我这样写book1.AuthorBook.Add(author1);visual studio 强调作者1
  • 下划线并说明什么?
  • 参数类型“WpfApplication1.Author”不可分配给参数类型“WpfApplication1.AuthorBook”
  • 这意味着您的模型设置不正确。正如我在 cmets 中所说,您的 Book 应该有一个导航属性,它是 Author 类型的集合。否则你的模型不正确。你有很多在这里,所以阅读this了解更多信息。
  • @CodingYoshi 导航属性的名称应该是AuthorsAuthorBook 类型/表并不是真正的域概念,它只是关系样板。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多