ef设置非自增长id_c# – EF6 CodeFirst My [Key] Id列不会自动递增,因为标识列应该是...

在EF6 CodeFirst中,尝试设置基类的Id属性为非自增长,导致在数据库中创建的表没有标识列。在插入数据时遇到DUPLICATE KEY异常。通过调整OnModelCreating方法配置,尝试避免创建单独的基类表,但保存新记录时Id未自动分配,引发冲突。寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有几个类,我需要从一个持有Id的普通基类派生.暂时忽略其中的一个,让我们说:

public class MyBase {

[Key]

public int Id { get; set; }

}

public class MyName : MyBase {

public string Name { get; set; }

}

我的上下文(DataContext)如下所示:

public DbSetMyNames { get; set; }

// to avoid having EF make a MyBases table and instead map

// MyBase.Id into MyNames and my other derived classes I do this ...

protected override void OnModelCreating((DbModelBuilder modelBuilder) {

modelBuilder.Entity()

.Property(c => c.Id)

.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

modelBuilder.Entity()

.Map(m => {

m.MapInheritedProperties();

m.ToTable("MyNames");

});

}

结果DB,当我启用迁移,添加迁移初始和更新数据库是我没有名为MyBase的表,而是我得到MyNames中的Id列

dbo.MyNames

-----------

Id (PK,int,not null)

Name (nvarchar(max),null)

到目前为止这么好,所有的编译和构建,然后我使用如下所示的测试:

using ( DataContext dc = new DataContext()) {

var jj = new MyName { Name = "Janice Joplin" };

dc.MyNames.Add(jj);

dc.SaveChanges();

var jh = new MyName { Name = "Jimmy Hendrix" };

dc.MyNames.Add(jh);

dc.SaveChanges();

}

这是第一次(Janice添加了Id = 0)但不是第二次… Jimmy获得了DUPLICATE KEY异常.注意(为了全面披露)我实际上在我的代码的另一部分中创建了jj和jh对象,然后将它们作为MyBase对象传递到这个方法(上面)中,然后将它们重命名为MyName对象,如果它们是这样的.我希望这不是一个问题.

我猜,如果一切都在一个表中,则可以将Id标识为身份,并使用@@ IDENTITY来分配对象Id值.也许我将需要创建一个MyBases表,然后先创建该记录,然后将该Id重复到事务中的派生表中.这是最好的方法?

任何帮助这个EF6 CodeFirst新手将不胜感激.谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值