gpt4 book ai didi

c# - Entity Framework : Object Reference not set to instance of an object

转载 作者:行者123 更新时间:2023-12-04 13:46:24 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is a NullReferenceException, and how do I fix it?

(27 个回答)


2年前关闭。




刚开始学习 Entity Framework 6,但在将数据从我的 Web 应用程序添加到 MySQL 数据库时遇到了问题。我觉得我做的一切都是正确的,但是当我尝试使用代码优先方法向数据库添加内容时,我总是收到“System.NullReferenceException:对象引用未设置为对象的实例”。代码如下所示。

客户类别:

namespace LibraryManager.Models
{
public class Customer
{
public int CustomerId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public virtual ICollection<Book> BooksRead { get; set; }

public Customer()
{
this.BooksRead = new List<Book>();
}
}
}

书类:
namespace LibraryManager.Models
{
public class Book
{
public int BookId { get; set; }
public string Name { get; set; }
public string Genre { get; set; }
public double Rating { get; set; }
public Boolean Available { get; set; }
public string Author { get; set; }
public string Desc { get; set; }
public virtual Customer Customer { get; set; }
}
}

数据库管理器
public class DatabaseManager
{

/**
* Adds a book into the database
*/
public void AddBook(Book book)
{
using (var ctx = new DatabaseContext())
{
ctx.Books.Add(book); -->Error Occurs here
ctx.SaveChanges();
}
}
}

上下文类
 public class DatabaseContext : DbContext
{
public DbSet<Book> Books { get; set; }
public DbSet<Customer> Customers { get; set; }

public DatabaseContext() : base()
{


}
}

提前致谢

编辑:

代码调用 AddBook
  Book HarryPotter = new Book() { Name = "Chamber of Secrets", Genre = "Fantasy", Rating = 8.6, Available = true, Author = "J.K Rowling" };
DatabaseManager manager = new DatabaseManager();
manager.AddBook(HarryPotter);

最佳答案

第一。向 CustomerId 和 BookId 属性添加一个键属性。根据调用该方法的代码,您的 Customer 属性为空,因此它失败了,因为它无法与空客户建立外部关系。因此,要么在您的构造函数中指定客户,要么在您的 AddBook 中指定一个空检查器来检查 Customer 是否为空,如果是,则创建一个新客户。

public void AddBook(Book book)
{
using (var ctx = new DatabaseContext())
{
ctx.Books.Add(book);

if (boot.Customer == null)
book.Customer = new Customer();

ctx.SaveChanges();
}
}

但是,您不想为每本书创建一个新客户(我假设),因此在您的书籍构造函数中需要一个客户,以便可以在数据库中建立关系。在您的方法中使用 try/catch 进行错误处理以帮助您进行调试和跟踪也是值得的。

关于c# - Entity Framework : Object Reference not set to instance of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com