2016-01-21 4 views
2

Я пытаюсь создать свою первую миграцию с помощью Entity Framework 7 с кодом первой разработкой, и я получаю следующее сообщение об ошибке:Entity Framework 7 Проблемы создания миграции, поскольку навигация свойство с таким же именем существует

The property 'Email' cannot be added to the entity type 'UserDTO' because a navigation property with the same name already exists on entity type 'UserDTO'.

Моя среда: 1) Visual Studio 2015 2) Entity Framework версия 7.0.0-rc1-конечные аннотаций 3) код первой разработки 4) Использование свободно API, а не данных

Я не могу понять, что первопричиной проблемы является только I'v e получил несколько идей. Предполагается, что мой класс RoleDTO использует свое свойство адреса электронной почты как свой ПК, а также имеет набор объектов RoleDTO в качестве свойства.

Ниже приведен единственный класс, который унаследовал от DbContext прямо сейчас. Я прокомментировал другую сущность, которую я должен попытаться и уменьшить проблему.

class StorageContext : DbContext 
{ 
    public DbSet<UserDTO> Users { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlServer("MySQLServerConnectionString") 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<UserDTO>().HasKey(entity => entity.Email); 
     //modelBuilder.Entity<UserDTO>().HasMany(entity => entity.Roles); 
    } 
} 

И вот класс UserDTO. Может ли кто-нибудь увидеть, что вызывает ошибку, когда я пытаюсь выполнить миграцию?

internal class UserDTO 
{ 
    public EmailAddress Email { get; private set; } 

    public string FullName { get; private set; } 

    public string UserName { get; private set; } 

    public virtual ICollection<string> Roles { get; private set; } 

    // more below here like a constructor and some basic methods 

Если переключить ключ для UserDTO в простой строки вместо объекта complext EmailAddress, похоже, он получает мимо этой ошибки, и я получаю другой, столь же интересный:

The property 'Roles' on entity type 'Microsoft.SRE.NavisionOnline.ConfigurationAutomation.DAL.SQLEntities.UserDTO' has not been added to the model or ignored.

+0

Я была такая же проблема с утверждением HasIndex –

ответ

3

Как насколько я знаю, вы не можете использовать сложный тип как ПК.

Для второго сообщения об ошибке: Вы не можете использовать ICollection<string> Roles {..}, EF не будет отображать это свойство в таблицу, потому что вы используете «string» как тип.

Вам нужно определить класс ролей и назначить ему PK

public class Role 
{ 
    public int Id {get; set;} 
    public string RoleName {get; set;} 
} 

И тогда в вашем UserDTO:

public ICollection<Role> Roles {...} 
+0

я имел такую ​​же проблему с оператор HasIndex. Этот ответ дал мне решение –