主键值在Entity框架数据库中不会自动增加

时间:2013-07-23 11:42:21

标签: c# sql-server linq entity-framework-5

我确定我错过了一些非常小的东西但是我遇到了主要值自动增量的问题。我创建了两个简单的表,并且我已经采用了Entity Framework 5的现有数据库模型第一种方法。我从控制台程序中简单地在表中添加值。

我的问题是代码第一次运行正常,但如果我尝试通过再次运行整个应用程序来添加更多值而崩溃,我找到了原因; EF不会自动增加主索引。

CREATE TABLE [dbo].[Book_Titles] (
[Book_ID] INT            NOT NULL,
[Title]   NVARCHAR (150) NOT NULL,
PRIMARY KEY CLUSTERED ([Book_ID] ASC)
);


CREATE TABLE [dbo].[Books_Authors] (
[Author_Id]   INT            NOT NULL,
[Author_Name] NVARCHAR (150) NOT NULL,
[Book_ID]     INT            NULL,
PRIMARY KEY CLUSTERED ([Author_Id] ASC),
FOREIGN KEY ([Book_ID]) REFERENCES [dbo].[Book_Titles] ([Book_ID])
);

控制台程序

namespace Database_First_01
{
class Program
{
    static void Main(string[] args)
    {


        using (var db = new BooksContext())
        {
            var book = new Book_Titles()
            {
                Title ="EF ",
            };

            var author = new Books_Authors()
            {
                Author_Name = "me!",
            };

            book.Books_Authors.Add(author);
            db.Book_Titles.Add(book);
            db.SaveChanges();
        }
    }
}
}
提前多多感谢。

2 个答案:

答案 0 :(得分:5)

试试这个

 CREATE TABLE [dbo].[Book_Titles] (
  [Book_ID] INT   IDENTITY(1,1)   NOT NULL,
  [Title]   NVARCHAR (150) NOT NULL,
  PRIMARY KEY CLUSTERED ([Book_ID] ASC)
);

在列

上定义Identity

如果你愿意,可以和其他人一样。

答案 1 :(得分:0)

Microsoft SQL Server使用IDENTITY关键字执行自动增量功能。在你的情况下它不存在。

您可以在不同情况下使用IDENTITY属性

  • 与CREATE TABLE
  • 一起使用
  • 和ALTER TABLE Transact-SQL语句。

所以,如果您已经创建了表(并且它有数据),您可能会像以下一样进行更改。

 ALTER TABLE (yourTable) ADD NewColumn INT IDENTITY(1,1)
 ALTER TABLE (yourTable) DROP COLUMN OldColumnName
 sp_rename 'yourTable.NewColumn', 'OldColumnName', 'COLUMN'

它会将您的数据保存在现有表格中。

希望它会有所帮助