Can*_*ğlu 3 sql-server entity-framework ef-code-first
我的POCO设置如下:
public class Notification : BaseClass
{
public User Receiver { get; set; }
[Required, Index]
public long ReceiverID { get; set; }
public virtual User ContextualUser { get; set; }
public long? ContextualUserID { get; set; }
public virtual User Actor { get; set; }
public long? ActorID { get; set; }
public string Content { get; set; }
public string Uri { get; set; }
[Required]
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的基类有只有三个属性:ID,CreateDate,和IsDeleted,但没有涉及到User类:
public abstract class BaseClass
{
[Key]
public long ID { get; set; }
[Required]
public DateTime CreateDate { get; set; }
public bool IsDeleted { get; set; }
public BaseClass()
{
CreateDate = DateTime.UtcNow;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Entity Framework会创建一个额外的列User_ID,它始终为null,如下所示:
它显然没有映射到任何东西.我的其他实体(无论是否来自相同的基类)都没有这个幻像列.为什么要创建此列?我使用SQL Azure在EF 6.1.3代码优先.
更新:我也在update-databasePM控制台上运行但没有任何改变,我仍然有这个专栏.
更新2:甚至在列上定义了索引和外键.我已经尝试删除它(它不是一个实时应用程序)但它被一个索引引用:
alter table notifications drop column User_ID
Msg 5074, Level 16, State 1, Line 1
The index 'IX_User_ID' is dependent on column 'User_ID'.
Msg 5074, Level 16, State 1, Line 1
The object 'FK_dbo.Notifications_dbo.Users_User_ID' is dependent on column 'User_ID'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN User_ID failed because one or more objects access this column.
Run Code Online (Sandbox Code Playgroud)
我User班级的导航属性配置不正确.由于Notification类没有叫做财产User,而是Receiver,因为我已经忘了加上正确的名称(接收器)作为我的逆属性User类,它有一个Notifications集合,用于导航产生这种额外的领域从 User 到 Notification秒.我已经[InverseProperty("Receiver")]在User课堂上为我的集合添加了注释,它现在可以正常工作了.