Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架表继承保存问题_C#_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

C# 实体框架表继承保存问题

C# 实体框架表继承保存问题,c#,entity-framework,entity-framework-4.1,C#,Entity Framework,Entity Framework 4.1,我在数据库中有表继承: Ticket{TicketId, TicketTypeId, CreatedBy, Title, Description etc.} UserInfo{TicketId etc.} TicketId是主键自动递增。表UserInfo继承Ticket表,因此UserInfo中的TicketId实际上是FK的TicketId来自Ticket表。 我有EF中的模型: public abstract class Ticket { [Key]

我在数据库中有表继承:

Ticket{TicketId, TicketTypeId, CreatedBy, Title, Description etc.}
UserInfo{TicketId etc.}
TicketId
是主键自动递增。表
UserInfo
继承
Ticket
表,因此
UserInfo
中的
TicketId
实际上是
FK
TicketId
来自
Ticket
表。
我有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();
但SaveChanges()上的应用程序中断。
我得到以下错误:

{“无效的列名'User\u UserId'。”}
更新
我将
CreatedBy
更改为
UserId
,并传递了此错误,但现在我还有两个问题:
我将UserInfo保存到数据库中,但UserInfo表中并没有任何内容。我认为EF可以在保存后添加此字段?
数据库中的此票证表已绑定到UserInfo,但票证TID也将其绑定到数据库中的其他几个表,但当我尝试保存对象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能处理这种情况吗?

我将CreatedBy更改为UserId,并传递了此错误

不必更改属性名称。您只需告诉EF,
CreatedBy
User
属性的外键(EF不会自动检测到这一点,因为名称不符合命名约定):

我将UserInfo保存到数据库中,但UserInfo表中并没有任何内容。我 是否认为EF可以在保存后添加此字段

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

…我得到这个错误

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

我将CreatedBy更改为UserId,并传递了此错误

不必更改属性名称。您只需告诉EF,
CreatedBy
User
属性的外键(EF不会自动检测到这一点,因为名称不符合命名约定):

我将UserInfo保存到数据库中,但UserInfo表中并没有任何内容。我 是否认为EF可以在保存后添加此字段

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

…我得到这个错误

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

[ForeignKey("User")]
public Guid CreatedBy { get; set; }
public virtual User User { get; set; }
[Table("UserInfo")]
public class UserInfo : Ticket
{
    ...
}