Я использую 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?
Пожалуйста, проверьте ниже вопрос о переполнении стека http://stackoverflow.com/questions/27609023/how-to-get-ef6-to-honor-unique-constraint-on-fk-in-association-relationship-mu – AzizKapProg
Благодарим вас за ответ, но вы подразумеваете, что это невозможно, потому что «Entity Framework в настоящее время поддерживает базовые ссылочные ограничения на первичные ключи»? – Frag