C# 如何在最新EF 6.1.3中的ID上添加标识种子
请不要将此问题标记为重复问题,因为我已经检查了类似的问题,并且它们的错误消息和版本不相同。 他们中的许多人使用了可能是3年前的旧版本,因此我认为对于我正在使用的最新版本的EF,应该有一种不同的方式来实现我想要的。谢谢。 我正在尝试使用EF 6.1.3的最新版本创建一个表Event(我使用代码优先) 一切正常,只有标识种子不适用于事件表上的ID属性 这是我的密码:C# 如何在最新EF 6.1.3中的ID上添加标识种子,c#,entity-framework,C#,Entity Framework,请不要将此问题标记为重复问题,因为我已经检查了类似的问题,并且它们的错误消息和版本不相同。 他们中的许多人使用了可能是3年前的旧版本,因此我认为对于我正在使用的最新版本的EF,应该有一种不同的方式来实现我想要的。谢谢。 我正在尝试使用EF 6.1.3的最新版本创建一个表Event(我使用代码优先) 一切正常,只有标识种子不适用于事件表上的ID属性 这是我的密码: public class Event { public Event() {
public class Event
{
public Event()
{
Organizers = new HashSet<AspNetUser>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }
....................
public virtual ICollection<AspNetUser> Hosts {get; set;}
}
如您所见,它在Up()中添加了一行不需要的代码:
而在下面()
我尝试在不提供ID值的情况下将值插入此表,但失败:
下面是sql查询
insert into Events values( 'Title', 'Address', '2015-04-09 20:00:00.000','2015-04-09 20:00:00.000', 30, 'Content!')
这是错误消息
提供的值的列名或数目与表不匹配
定义
所以我的问题是:
谢谢。部分问题在于此,特别是
Map()
调用:
modelBuilder.Entity<Event>()
.HasMany(e => e.Organizers)
.WithMany(e => e.Events)
.Map(e => e.ToTable("AspNetUsers").MapLeftKey("UserId").MapRightKey("EventId"));
问题的第二部分是
Id
字段是字符串。我不相信字符串字段可以是数据库生成选项。Identity
-它应该是一个数值。仅仅因为问题较旧并不意味着它们不再相关。事实上,EF并没有以任何方式改变,这与您的问题相关,至少从版本4.1开始。因此,任何在旧版本中解决您的问题的问题都会在最新版本中解决您的问题。我已经尝试过这些解决方案,但没有一个对我有效。完美~!!!!我的身份证类型是我犯错误的地方!现在它工作了!还有一件事要提:我注释掉了OnModelCreating()方法中的最后两个块,它们是我自己手工编写的,并且仍然有效。所以我很困惑我是否需要这两个块(我指的是modelBuilder.Entity()…)。@Franva-好吧,你不需要最后一个,因为你也在使用属性(它做同样的事情)。无法说明另一个,因为您尚未包含该组实体的定义。请参阅我的更新。另外,我认为注释[Key]是不必要的,因为属性名为ID,默认情况下EF会将其视为ID,对吗?
public partial class AddEventTable : DbMigration
{
public override void Up()
{
RenameTable(name: "dbo.AspNetUsers", newName: "AspNetUsers1");
CreateTable(
"dbo.Events",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
Title = c.String(nullable: false, maxLength: 256),
Venue = c.String(),
StartDateTime = c.DateTime(nullable: false),
EndDateTime = c.DateTime(nullable: false),
Capacity = c.Int(nullable: false),
Content = c.String(),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.AspNetUsers",
c => new
{
UserId = c.String(nullable: false, maxLength: 128),
EventId = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => new { t.UserId, t.EventId })
.ForeignKey("dbo.Events", t => t.UserId, cascadeDelete: true)
.ForeignKey("dbo.AspNetUsers1", t => t.EventId, cascadeDelete: true)
.Index(t => t.UserId)
.Index(t => t.EventId);
}
public override void Down()
{
DropForeignKey("dbo.AspNetUsers", "EventId", "dbo.AspNetUsers1");
DropForeignKey("dbo.AspNetUsers", "UserId", "dbo.Events");
DropIndex("dbo.AspNetUsers", new[] { "EventId" });
DropIndex("dbo.AspNetUsers", new[] { "UserId" });
DropTable("dbo.AspNetUsers");
DropTable("dbo.Events");
RenameTable(name: "dbo.AspNetUsers1", newName: "AspNetUsers");
}
}
RenameTable(name: "dbo.AspNetUsers", newName: "AspNetUsers1");
RenameTable(name: "dbo.AspNetUsers1", newName: "AspNetUsers");
insert into Events values( 'Title', 'Address', '2015-04-09 20:00:00.000','2015-04-09 20:00:00.000', 30, 'Content!')
modelBuilder.Entity<Event>()
.HasMany(e => e.Organizers)
.WithMany(e => e.Events)
.Map(e => e.ToTable("AspNetUsers").MapLeftKey("UserId").MapRightKey("EventId"));
.Map(e => e.ToTable("AspNetUsersToEventsMapping")
.MapLeftKey("EventId")
.MapRightKey("UserId"))