Я мой ПОКО настроить так:Почему Entity Framework создает дополнительный столбец, который не отображается в любое поле и всегда равен нулю?
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; }
}
Мой базовый класс не только три свойства: 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;
}
}
Однако , Entity Framework создает дополнительную колонку, User_ID
, то есть всегда null, как показано ниже:
На первый взгляд это не карта. Ни один из моих других объектов (или полученный из того же базового класса или нет) имеет этот фантомный номер. Почему создается этот столбец? Я нахожусь в EF 6.1.3, сначала с SQL Azure.
UPDATE: Я также побежал update-database
в консоли PM, но ничего не изменилось, у меня все еще есть эта колонка.
ОБНОВЛЕНИЕ 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.
@FabioLuz я мертв уверен. он имеет только три свойства, которые я сказал: ID, CreateDate, IsDeleted. это оно. Просто повторите проверку, чтобы убедиться. –
У вас есть класс сопоставления (с использованием FluentAPI)? –
@FabioLuz no. Я не использую Fluent API в любом месте приложения. В этом смысле я все-аннотация. –