同じ名前のナビゲーションプロパティが存在するため、Entity Framework 7で移行が作成されない

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

質問

Entity Framework 7を使ってコードを最初に開発して初めての移行を作成しようとしていますが、次のエラーが表示されます。

エンティティタイプ 'UserDTO'に同じ名前のナビゲーションプロパティが既に存在するため、プロパティ 'Email'をエンティティタイプ '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クラスがあります。誰かが私がマイグレーションをしようとしているときにエラーを引き起こしているのを見ることができますか?

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の代わりに普通の文字列に切り替えると、それはそのエラーを過ぎたように見えます。

エンティティタイプ 'Microsoft.SRE.NavisionOnline.ConfigurationAutomation.DAL.SQLEntities.UserDTO'のプロパティ 'Roles'がモデルに追加されていないか、または無視されています。

受け入れられた回答

私が知っている限り、複雑なタイプをPKとして使用することはできません。

2番目のエラーメッセージ: ICollection<string> Roles {..}使用することはできません。タイプとして "string"を使用しているため、EFはこのプロパティをテーブルにマップしません。

あなたはRoleクラスを定義し、それにPKを割り当てる必要があります

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

そしてあなたのUserDTOで:

public ICollection<Role> Roles {...}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ