实体框架表继承保存问题

本文关键字:保存 问题 继承 框架 实体 | 更新日期: 2023-09-27 18:36:17

我在数据库中有表继承:

Ticket{TicketId, TicketTypeId, CreatedBy, Title, Description etc.}
UserInfo{TicketId etc.}

TicketId是主键自动递增。表UserInfo继承Ticket表,因此UserInfo中的TicketId实际上是FK Ticket表中的TicketId
我在EF中有模型:

public abstract class Ticket
    {
        [Key]
        public int TicketId { get; set; }
        public int TicketTypeId { get; set; }        
        public string Title { get; set; }
        public string Description { get; set; }
        public Guid CreatedBy { get; set; }
        public virtual User User { get; set; }
    } 
public class UserInfo :Ticket
    {
        ...
    }

当我尝试将新的UserInfo对象插入数据库时,我写道:

User u = context.Users.Find(Membership.GetUser().ProviderUserKey);

            UserInfo o = new UserInfo();
            o.CreatedBy = u.UserId;
            o.Description = "First EF user info to database!";
            o.TicketTypeId = 1;
            o.Title = "First User Info EF";
            context.Tickets.Add(o);
            context.SaveChanges();

但是应用程序在保存更改()上中断。
我收到以下错误:

{"无效的列名'User_UserId'。"}
更新
CreatedBy更改为UserId并通过了此错误,但现在我在这里还有两个问题:
我将用户信息保存到数据库,但用户信息表中没有任何内容。我以为EF可以在保存后添加此字段?
数据库中的这个票证表绑定到用户信息,但它也通过 TicketID 绑定到数据库中的更多表,但是当我尝试保存对象 UserInfo 时,我收到此错误:
{"The INSERT statement conflicted with the FOREIGN KEY 
constraint '"FK_Tickets_Groups'". The conflict occurred in database '"db_Example'", table '"dbo.Groups'", column 'TicketId'.'r'nThe statement has been terminated."}

因此,为了保存此内容,我目前删除了除UserInfo之外的表引用。EF 可以处理这种情况吗?

实体框架表继承保存问题

我将创建者更改为用户 ID,并传递了此错误...

无需更改属性名称。只需告诉 EF CreatedByUser 属性的外键(EF 不会自动检测到这一点,因为名称不遵循命名约定):

[ForeignKey("User")]
public Guid CreatedBy { get; set; }
public virtual User User { get; set; }
我将用户信息

保存到数据库,但用户信息表中没有任何内容。我 以为EF可以在保存后添加此字段?

如果派生实体属性位于单独的表中,则必须为此实体指定表名称(每类型表(TPT) 继承映射),否则默认情况下,EF 会将所有派生实体放入与基实体相同的表中(每个层次结构表(TPH) 继承映射):

[Table("UserInfo")]
public class UserInfo : Ticket
{
    ...
}

。我收到此错误...

似乎TicketUserInfo具有表Groups的外键,并且此外键属性未设置为有效的组键值。插入实体时,会违反数据库中的外键约束,从而导致异常。