我试图做一些简单的事情,但这不适用于EF 4.1,它在EF 6中有效,但我无法更新版本,因为我需要在旧服务器中使用此应用程序并且不支持它。
这是我的代码:
chat = new Chat()
{
AdminId = 99
};
db.Chat.Add(chat);
db.SaveChanges();
var cp = new List<ChatPeople>();
foreach (int user in usersids)
{
cp.Add(new ChatPeople
{
ChatId = chat.Id,
UserId = user
});
}
cp.ForEach(c => db.ChatPeople.Add(c));
这是模型:
[Table("CHATS", Schema = "SCHEMA")]
public class Chat
{
[Column("ID")]
public decimal Id { get; set; }
[Column("ADMINID")]
public decimal AdminId { get; set; }
public virtual ICollection<ChatPeople> ChatPeople { get; set; }
public virtual ICollection<ChatHistory> ChatHistory { get; set; }
}
(我需要十进制Id,因为int在Oracle中不起作用。)
我的问题是当我保存Chat
时,这不会在数据库中返回此注册表的当前ID,而在ChatPeople中尝试执行此操作时ChatId = chat.Id,
我没有这个值。数据库Chat
正在使用AdminId = 99
和Id = (Autonumeric-Identity)
如何获取正在保存的注册表ID?
答案 0 :(得分:0)
尝试在ID上方添加属性[Key]这应该将其设置为EF生成的表的主键。
[Key]
[Column("ID")]
public decimal Id { get; set; }
答案 1 :(得分:0)
我需要放置其他属性[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
并且正常工作。
在这篇文章中回答: Entity Framework Code First Using One column as Primary Key and another as Auto Increment Column
最后:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("ID")]
public decimal Id { get; set; }