2016-05-05 2 views
0

Я использую ASP.NET Идентичность в моем проекте, так мой AspNetUser таблица выглядит примерно так:Entity Framework - CF - Внешний ключ для отображения другого столбца

public class AspNetUser 
{ 
    [Key, Index(IsUnique = true), DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 

    [Index(IsUnique = true), DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int InternalId { get; set; } 

    // Navigation properties 
    public virtual ICollection<RequestHistory> RequestHistories { get; set; } 
} 

Я добавил InternalId использовать в качестве иностранного ключ в моих пользовательских таблицах, потому что мне не нравится использовать Guids везде. Итак, давайте рассмотрим эту таблицу, например:

public class RequestHistory 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public int? UserId { get; set; } 

    // Navigation properties 
    [ForeignKey("UserId")] 
    public virtual AspNetUser User { get; set; } 
} 

выглядит хорошо до сих пор, RequestHistory должны иметь навигационное свойство AspNetUser работает на RequestHistory.UserId = AspNetUser.InternalId и наоборот. Но когда я пытаюсь запустить мой проект я получаю сообщение об ошибке сказав:

RequestHistory_User_Target_RequestHistory_User_Source: : The types of all properties in the Dependent Role of a referential constraint must be the same as the corresponding property types in the Principal Role. The type of property 'UserId' on entity 'RequestHistory' does not match the type of property 'Id' on entity 'AspNetUser' in the referential constraint 'RequestHistory_User'. 

Что имеет смысл, потому что EF это Propably пытается сопоставить их с помощью поведения по умолчанию, но как я могу заставить эту ассоциацию использовать InternalId в качестве внешнего ключа из Таблица AspNetUser?

+0

Пожалуйста, проверьте ниже вопрос о переполнении стека http://stackoverflow.com/questions/27609023/how-to-get-ef6-to-honor-unique-constraint-on-fk-in-association-relationship-mu – AzizKapProg

+0

Благодарим вас за ответ, но вы подразумеваете, что это невозможно, потому что «Entity Framework в настоящее время поддерживает базовые ссылочные ограничения на первичные ключи»? – Frag

ответ

0

Вам необходимо установить внешний ключ для InternalId вместо UserId в RequestHistory.

+0

Хотелось бы, чтобы это было легко. Атрибуты ForeignKey относятся к одному и тому же классу, поэтому, указывая на объект ForeignKey on User, все действия im делают указание EF поместить фактический ключ в свойство UserId. Но, чтобы дважды проверить, что я изменил ForeignKey на InternalId, и, как и ожидалось, я получаю 'ForeignKeyAttribute на свойстве 'Пользователь' по типу 'RequestHistory' недопустим. Имя внешнего ключа «InternalId» не было найдено в зависимом типе «RequestHistory». Значение Name должно быть разделенным запятыми списком имен свойств внешнего ключа. ' – Frag

Смежные вопросы