1

我确信我错过了一些非常小的东西,但我遇到了主值自动增量的问题。我创建了两个简单的表,并通过使用 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();
        }
    }
}
}

提前谢谢了。

4

2 回答 2

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在列上定义

如果你愿意,和其他的一样。

于 2013-07-23T11:44:36.913 回答
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'

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

希望它会有所帮助

于 2013-07-23T12:50:36.377 回答