Тип сущности Business_attrib2object имеет составной первичный ключ, определенный с аннотациями данных.Чтобы установить составной первичный ключ, используйте свободный API - PullRequest
0 голосов
/ 18 февраля 2019

Я установил составной первичный ключ, используя свободный API, все еще ошибка, когда я пытаюсь создать ClassesController (MVC Controller с представлениями с использованием Entity Framework).

Объявление класса Classes:

public partial class Classes
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Classes()
    {
        this.Business_attrib2object = new HashSet<Business_attrib2object>();
        this.Objects = new HashSet<Objects>();
    }
    [Key]
    public System.Guid IdClass { get; set; }
    public string Name { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Business_attrib2object> Business_attrib2object { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Objects> Objects { get; set; }
}

Объявление класса Business_attrib2object:

 public partial class Business_attrib2object
{
    [Key]
    public System.Guid IdClass { get; set; }
    [Key]
    public System.Guid IdAttribute { get; set; }

    public Nullable<System.Guid> IdAuthor { get; set; }

    public virtual Attributes Attributes { get; set; }
    public virtual Classes Classes { get; set; }
}

DBContext:

public class Business_attrib2objectContext : DbContext
{
    public DbSet<Business_attrib2object> Business_attrib2object { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Business_attrib2object>().HasKey(ba => new { ba.IdClass, ba.IdAttribute });      
    }

    public Business_attrib2objectContext(DbContextOptions<Business_attrib2objectContext> options)
        : base(options)
    {
        Database.EnsureCreated();
    }
}

Создание контроллера: Создание контроллера Ошибка: Сообщение об ошибке

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Если вы использовали это:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Business_attrib2object>().HasKey(ba => new { ba.IdClass, ba.IdAttribute });      
}

Вам это не нужно:

public partial class Business_attrib2object
{
    [Key]
    public System.Guid IdClass { get; set; }
    [Key]
    public System.Guid IdAttribute { get; set; }

    ...

Просто удалите атрибуты [Key], которые должны работать:

public partial class Business_attrib2object
{
    public System.Guid IdClass { get; set; }
    public System.Guid IdAttribute { get; set; }

    public Nullable<System.Guid> IdAuthor { get; set; }

    public virtual Attributes Attributes { get; set; }
    public virtual Classes Classes { get; set; }
}
0 голосов
/ 18 февраля 2019

Не уверен, что за путаница.Ошибка явная.У вас есть атрибуты данных, указывающие составной первичный ключ, и вы не можете этого сделать.У вас уже есть необходимая свободная конфигурация в вашем контексте, поэтому просто удалите два [Key] атрибута данных в вашем Business_attrib2object классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...