实体框架4.1在保存数据时不生成ID

时间:2015-08-04 12:39:09

标签: c# .net database entity-framework

我试图做一些简单的事情,但这不适用于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 = 99Id = (Autonumeric-Identity)

保存

如何获取正在保存的注册表ID?

2 个答案:

答案 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; }