Entity Framework 6 ошибка DTO - “has no key”

331
30 сентября 2017, 19:30

Сделал модель:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Server.DB 
{   
    [Serializable]
    [Table("users")]
    public class UserDTO : AbstractDto {
        [Key]
        [Column("id")]
        [Display(Name = "Идентификатор пользователя")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public UInt32 ID { get; set; }
        [Column("login")]
        [Required]
        [Display(Name = "Логин (он же E-Mail) пользователя - невидим для других")]
        [MaxLength(32)]
        public string Login { get; set; }
        [Column("password")]
        [Required]
        [Display(Name = "Пароль пользователя")]
        [MaxLength(24)]
        public string Password { get; set; }
        [Column("nick")]
        [Required]
        [Display(Name = "Отображаемый для всех ник пользователя")]
        [MaxLength(16)]
        public string Nick { get; set; }    
    }   
}

далее, код коннектора:

using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using MySql.Data.Entity;
namespace Server.DB.DataAccess {
    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class EntityContext : DbContext, IEntityContext {
        public EntityContext() : base("name=DBConnector") { }
        public DbSet<UserDTO> Users { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            base.OnModelCreating(modelBuilder);
        }
    }
}

При попытки простого Select-а:

var query = UnitOfWorkFactory.Instance.Get.EntityContext.Set<UserDTO>().AsQueryable();
query = query.Where(q => q.Login    == "test@test.ru");
query = query.Where(q => q.Password == "1234");
UserDTO user = query.ToList()[0];

Получаю исключение:

Необработанное исключение типа "System.Data.Entity.ModelConfiguration.ModelValidationException" в EntityFramework.dll

Дополнительные сведения: One or more validation errors were detected during model generation:

Server.DB.DataAccess.UserDTO: : EntityType 'UserDTO' has no key defined. Define the key for this EntityType.

Users: EntityType: EntitySet 'Users' is based on type 'UserDTO' that has no keys defined.

Вот настройки соединения:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <connectionStrings>
        <add name="DBConnector"
                providerName="MySql.Data.MySqlClient"
                connectionString="server=192.168.56.6;port=3306;database=ogame;uid=*****;password=*****"/>
    </connectionStrings>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
        <providers>
            <provider invariantName="MySql.Data.MySqlClient"
                    type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/>
            <provider invariantName="System.Data.SqlClient"
                    type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
        </providers>
    </entityFramework>
</configuration>

Подскажите, в чём ошибка, и как можно заставить EF6 посмотреть на схему? С EF6 до этого не работал.

READ ALSO
Как запустить файл через приложение?

Как запустить файл через приложение?

Каким способом можно перехватить запуск файла через приложение?

265
Не отрисовываются элементы на форме

Не отрисовываются элементы на форме

На форме не отображаются некоторые элементы, а некоторые отображаются не полностью

201
Старт Xamarin Сервер-Клиент

Старт Xamarin Сервер-Клиент

Необходим старт в данной темеДля начала, хотелось бы создать AVD*+PC(клиент-сервер)

257