2016-04-08 12 views
1

私はそれを制御するために継承とアイデンティティを使用しようとしているアプリケーションがあります。継承を持つ空のアプリケーションでIdentityを使用するにはどうすればよいですか?

私はクライアントとシェフがこの人々の特性を継承するクラスの人々を持っています。

私は空のMVCアプリケーションを作成し、Identityを使いたいと思います。私は先週、空のアプリケーションにIdentityを実装する方法を研究しました。MVC Individual Accountを作成してベースとして使用する例が常に見つかりました。これから私はあまりにも多くのトラブルを抱えています。

public class ApplicationUser : IdentityUser 
{ 
} 

あなたが拡張することができます:あなたがここに探しているが、アイデンティティが動作する方法は、あなたがIdentityUserから継承するクラスを作成することであり、それは、アプリケーションのユーザーオブジェクトになり、正確にわから

答えて

0

ありませんこのクラスは、アプリケーション内のユーザーのために格納したいプロパティを持ちます。クライアントとシェフがシステムのユーザーであると想定されている場合(クライアント/シェフとしてログインできます)、ユーザーエンティティApplicationUserから継承する必要があります。

また、これらのクラスを拡張することもできますが、必要に応じて追加情報を保存することもできます。ただし、継承階層はSTI(単一テーブル継承)を使用して永続化されることに注意してください。つまり、ユーザーエンティティのすべてのプロパティと、そのユーザーエンティティのすべてのサブクラスは、すべて同じテーブルに存在します。識別子列が追加され、Entity Frameworkに各行のデータでインスタンス化するクラスを通知します。実際には、これは、サブクラスでnullableでないプロパティを持つことができないことを意味します。たとえば、Chefのプロパティがpublic string CulinarySchool { get; set; }の場合、Clientにはこのプロパティがないため、この要件を満たすことができないため、エンティティでこれを行うことはできません。ただし、これはエンティティクラスにのみ影響します。フォームの目的にこのプロパティが必要なビューモデルを作成することはできます。

あなたのPeopleクラスについては、これで何をしたいかによって異なります。 C#は多重継承をサポートしていないので、ApplicationUserクラスの代わりにPeopleクラスを置き換えるか、ApplicationUserのサブクラスをPeopleにしてからClientChefを継承するか今:実際にPeopleのインスタンスが存在してはいけません

public class People : ApplicationUser 
{ 
} 

public class Client : People 
{ 
} 

public class Chef : People 
{ 
} 

場合、あなたはそれを抽象化することができます。

+0

ありがとうChris Pratt!それはまさに私が探しているものです。どうもありがとうございます! –

関連する問題