現在、ユーザー用の同じデータベースにアクセスする複数のアプリケーションをリファクタリングしています。それぞれはユーザーに独自の特別なプロパティを追加し、多くのヌル値をもたらします...私はこれが気に入らないのです。私のアイデアは、アプリケーションごとに独自のIdentityUser、dbContextおよびUserManagerを使用することでした。 基本IdentityUserがあり、他のIdentityUserがそれから派生しています。それは次のようになります。ASp.net Entity Framework複数のIDユーザーエンティティ
ベースのユーザー:
public class User : IdentityUser
{
public string Username {get;set;}
public string Email {get;set;}
...
}
このユーザーのdbContextとのUserManager:
[Table("User2")]
public class User2 : User
{
public string SpecialProperty1 {get;set;}
public string SpecialProperty2 {get;set;}
}
public class User2Manager : UserManager<User2>
{
// code here
}
public class User2AuthenticationDbContext : IdentityDbContext<User2>
{
//code here
}
:
public class UserAuthenticationDbContext : IdentityDbContext<User>
{
//code here
}
public class UserManager : UserManager<User>
{
//code here
}
第二のユーザのために、私は次のことをやりました
User2テーブルには、たとえば2つのプロパティしかありません。 User2の主キーはUser Tableと同じで、FKも同じです。
asp.net mvcプロジェクトでは、私はUser2関連のクラスのみを使用します。今すぐこのアプリケーションを起動すると、「無効な列名SpecialProperty1とSpecialProperty2」という瞬時にエラーメッセージが表示されます。 エンティティフレームワークは、この追加のフィールドを持たないユーザーテーブルにアクセスしているようです。それをUser2 Tableと「マージ」せずにUser2エンティティを返します。 これを達成するために何ができるのですか、それを行う方法が異なる/より良い方法がありますか?
私の主な目標は、この複数のアプリケーションに対してこれをより明確に分離し、すべてのアプリケーションが同じデータベースにアクセスすることです。あなたが持っている必要がありますどのような
あなたの答えをありがとうございました。私はそれをすべてのアプリケーションからアクセスできるように独自のクラスライブラリに入れました。あなたの例では、すべてが1つのテーブルに収まるでしょうか?型名などを保持する列で区切られています。 TablePerTypeでこれを行う方法はありますか?たとえばここのように:https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tptこれは私です私の例では、すべてのユーザーが同じテーブルになり、EFは、レコードが識別子列に基づいて、自動的にそのテーブルにあるかを決定します – metabolic
...実行しようとしましたが、私は、MVCアプリケーションでのエラーメッセージが表示されます。各クラスのプロパティごとに列があります。重複したくない場合は、継承クラスと共通基底クラスが必要です。しかし、あなたはいつもいくつかのタイプのレコードには関係のないいくつかのNULLカラムを持つことになります - これはあなたを気にしません。 –
なぜデータベースについて考えていますか?あなたがEFコードの最初のアプローチに行くならば、それはあなたを悩ますものであってはなりません。 –