【问题标题】:How to add new object to database?如何将新对象添加到数据库?
【发布时间】:2012-10-21 22:00:43
【问题描述】:

我想在我的数据库中添加一本新书,但它不起作用。

class Program
    {
        static void Main(string[] args)
        {
            Knigi_DataEntities entities = new Knigi_DataEntities();
                Books newBook = new Books();
                newBook.Name = "C# 4 How-to";
                newBook.Published = 2010;
                newBook.Book_ID = 4;
                entities.AddToBooks(newBook);
                entities.SaveChanges();

            Knigi_DataEntities ent = new Knigi_DataEntities(); 
                  foreach (var book in ent.Books)
                {
                    Console.WriteLine("{0}, {1} {2}  ",
                    book.Book_ID, book.Name, book.Published);
                }
              }
            }

但是当我关闭//entities.SaveChanges(); 时,控制台会显示我的数据库中已经存在的对象。因此问题是由entities.SaveChanges();引起的
请告诉我,如何添加新对象?

【问题讨论】:

  • 请向我们提供有关错误的更多信息
  • 无法更新 EntitySet 'Books',因为它有一个 DefiningQuery 并且 元素中不存在 元素来支持当前操作。
  • 看到这个问题,也许有帮助:stackoverflow.com/questions/1589166/…

标签: c# entity-framework ado.net ado.net-entity-data-model savechanges


【解决方案1】:

你可以试试这个

 entities.Books.AddObject(newBook);
 entities.SaveChanges();

【讨论】:

  • 你可能没有正确设置 ef 也检查 dv 是否真的存在
【解决方案2】:

您确定 Id 不是主键,因此它想自动生成一个并且您不必输入它吗?

【讨论】:

    【解决方案3】:

    这里的一个问题可能是您的数据库中有一个 int 类型的主键未设置为 AutoIncrement。创建新的Books 时会出现的问题是int 的默认值是0,并且该ID 已经存在于您的数据库中。

    一种解决方案是在您的数据库中将其设置为 AutoIncrement 或检查最高 ID,加 1,将其分配给您的 Books 对象并插入它。

    在这种情况下,我会使用 AutoIncrement,因为它最简单,而且您不必考虑并发性。

    【讨论】:

    • 如果我们谈论的是 MSSQL,您可以打开表设计器,选择您的主键列并在属性窗口中将增量设置为 true。
    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2014-10-16
    • 2010-09-16
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多