У меня есть веб-приложение MVC asp.net с 3 таблицами, PersonType, Curriculum и CurriculumPersonType, которое связывает две другие таблицы вместе с составным ключом. Я пытаюсь выполнить оператор LINQ для этой таблицы. Когда я запускаю свой код, я получаю "EntityType: EntitySet 'CurriculumPersonType' не имеет определенного ключа. Определите ключ для этого типа сущности". ошибка.
Я начал с этого в моей модели:
public class CurriculumPersonType
{
[Key]
public long CurriculumId { get; set; }
[Key]
public long PersonTypeId { get; set; }
[ForeignKey("PersonTypeId")]
public virtual PersonType PersonType { get; set; }
[ForeignKey("CurriculumId")]
public virtual Curriculum Curriculum { get; set; }
}
и попытался добавить другие аннотации, такие как:
[Key]
[Column("CurriculumId",Order =1)]
public long CurriculumId { get; set; }
[Key]
[Column("PersonTypeId",Order =2)]
public long PersonTypeId { get; set; }
и
[Key]
[ForeignKey("FK_CurriculumPersonType_CurriculumId")]
public long CurriculumId { get; set; }
[Key]
[ForeignKey("FK_CurriculumPersonType_PersonTypeId")]
public long PersonTypeId { get; set; }
Ничто из этого не похоже на работу. (Это Entity Framework 6.2.0)
Я просматривал похожие сообщения о переполнении стека и других сайтах, но, похоже, не решил мою проблему. Я думаю, что мне просто нужен еще один набор глаз.
Вот таблицы:
CREATE TABLE [dbo].[CurriculumPersonType]
(
[CurriculumId] BIGINT NOT NULL,
[PersonTypeId] BIGINT NOT NULL,
primary key ([CurriculumId], [PersonTypeId]),
CONSTRAINT [FK_CurriculumPersonType_PersonTypeId] FOREIGN KEY ([PersonTypeId]) REFERENCES [dbo].[PersonType] ([Id]),
CONSTRAINT [FK_CurriculumPersonType_CurriculumId] FOREIGN KEY ([CurriculumId]) REFERENCES [dbo].[Curriculum] ([Id])
)
CREATE TABLE [dbo].[PersonType]
(
[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[Name] VARCHAR(50) NOT NULL,
)
CREATE TABLE [dbo].[Curriculum]
(
[Id] BIGINT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
[Name] varchar(500) NULL,
)
Другие 2 модели сущностей:
public class Curriculum
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
}
public class PersonType
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
}
И DBContext:
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext() : base("ApplicationDbContext")
{
}
public DbSet<Curriculum> Curriculums { get; set; }
public DbSet<CurriculumPersonType> CurriculumPersonTypes { get; set; }
public DbSet<PersonType> PersonTypes { get; set; }
}
У моего приложения есть другие таблицы / модели и т. Д., Но всякий раз, когда я пытаюсь поразить любую из них, я получаю ошибку выше.
Просто поиграв, я добавил PK в таблицу и модель CurriculumPersonType, и все работает отлично. Конечно, я не хочу этого делать, потому что это позволит дублировать значения, но, похоже, зависло на модели, не имеющей свойства с именем "Id".
Новая таблица / модель:
CREATE TABLE [dbo].[CurriculumPersonType]
(
[Id] BIGINT NOT NULL IDENTITY(1,1),
[CurriculumId] BIGINT NOT NULL,
[PersonTypeId] BIGINT NOT NULL,
CONSTRAINT [FK_CurriculumPersonType_PersonTypeId] FOREIGN KEY ([PersonTypeId]) REFERENCES [dbo].[PersonType] ([Id]),
CONSTRAINT [FK_CurriculumPersonType_CurriculumId] FOREIGN KEY ([CurriculumId]) REFERENCES [dbo].[Curriculum] ([Id]),
CONSTRAINT [PK_CurriculumPersonType] PRIMARY KEY ([Id])
)
public class CurriculumPersonType
{
[Key]
public long Id { get; set; }
//[Key]
//[Column(Order = 1)]
public long CurriculumId { get; set; }
//[Key]
//[Column(Order = 2)]
public long PersonTypeId { get; set; }
[ForeignKey("CurriculumId")]
public virtual Curriculum Curriculum { get; set; }
[ForeignKey("PersonTypeId")]
public virtual PersonType PersonType { get; set; }
}