實體框架7在創建遷移時遇到問題,因為存在具有相同名稱的導航屬性

c# ef-code-first ef-fluent-api entity-framework-core

我正在嘗試使用Entity Framework 7創建我的第一次遷移,代碼優先開發,我收到以下錯誤:

無法將屬性“電子郵件”添加到實體類型“UserDTO”,因為實體類型“UserDTO”上已存在具有相同名稱的導航屬性。

我的環境是:1)Visual Studio 2015 2)Entity Framework v7.0.0-rc1-final 3)代碼優先開發4)使用流暢的API,而不是數據註釋

我無法弄清楚問題的根本原因是什麼,但我有一些想法。我的RoleDTO類應該使用其電子郵件地址屬性作為其PK,並且它還具有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類。當我嘗試進行遷移時,有人能看到導致錯誤的原因嗎?

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的密鑰切換為普通字符串而不是Complext對象EmailAddress,它看起來好像已經過了那個錯誤,我得到了一個不同的,同樣有趣的:

實體類型“Microsoft.SRE.NavisionOnline.ConfigurationAutomation.DAL.SQLEntities.UserDTO”上的屬性“角色”尚未添加到模型中或被忽略。

一般承認的答案

據我所知,你不能使用複雜的類型作為PK。

對於第二條錯誤消息:您不能使用ICollection<string> Roles {..} ,EF不會將此屬性映射到表,因為您使用“string”作為類型。

您需要定義Role類並為其分配PK

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

然後在你的UserDTO中:

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因