2017-09-06 7 views
0

私は顧客が見積もりを作成できる非常に基本的なアプリケーションを持っている&私は各ユーザーに個別の見積もりID(基本的には非常に単純なマルチテナントアプリ)を持たせる必要がある。例えばAps.Net MVC同じテーブルだが一意のIDをユーザーごと

"USER 1" は、引用符、彼の引用のIDのは1,2,3,4,5,6,7,8..etcする必要があります作成します。..

"USER 2" は引用符を作成します最初の見積もりIDも1,2,3,4,5,6,7,8などとなります。

基本的に、各ユーザーは競合するビジネスですそれで彼らは別々の見積もりIDが必要です。一意の見積もりIDのほかに、引用符の表&は、他のすべての表がすべてのユーザーに対して全く同じになります。

これにはどのような方法が最適でしょうか?ユーザーごとに別々の "引用符"テーブルを作成しますか?そして私はこれをどのようにして行うのですか?私はmvc 5、ef 6のコードを最初に使用しています&私はできるだけシンプルにしておきたい。

私の引用モデルの例を次に示します。

public class Quote 
{ 
    [Key] 
    public int QuoteID { get; set; } 
    public DateTime QuoteDate { get; set; } 
    public string ClientsName { get; set; } 

    //[ForeignKey("ApplicationUsers")] 
    [Column("OwnerID")] 
    public string Id { get; set; } 
    public virtual ApplicationUser ApplicationUsers { get; set; } 
} 

簡単な解決策:以下のリチャーズの提案を1として

、私はちょうどhttp://hashids.org/net/

// original QuoteID = 120 
var userID = User.Identity.GetUserId(); 
var hashids = new Hashids(userID, 4, "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ"); 
var hashedID = hashids.Encode(item.QuoteID); 
var unhashedID = hashids.Decode(hashedID); 
// hashedID = 6DBD 
// unhashedID = 120 

を使用してハッシュにQuoteID年代を変換していますザ・は誰がどのように多くの引用符を伝えることはできないことを確認します彼らの競争相手は私が必要としていたものすべてを持っています - リチャードは私を再び軌道に乗せてくれたことに感謝します:)

答えて

1

顧客を追加するたびにアプリを更新する/移行を実行する必要のある問題に遭遇する可能性があるので、ユーザーごとにクォートテーブルを追加するのは嫌です。

まず、固有番号として公開される自動番号付きIDが本当に必要ですか?短いランダムな文字列をURLで見ることができます。 quotes.com/quote/m2dhfy?あなたは、あなたのアプリでそれを生成し、ルックアップキーとして使用することができます(私はオートナンバーアイデンティティ列も維持します)。

第2に、これらの順次IDが本当に必要な場合は、UserIdとQuoteIDの複合キーが必要です。あなたのURLにその方法でquotes.com/client1/1を設定し、UserIDとDBの参照を行うことができます

+0

それぞれの事業者は競合他社が行っているクォートの数が分からないように別々のIDでなければなりません。しかし、短いランダムな文字列は実際には素晴らしいアイデアです!なぜ私はそれを考えなかったのか分かりません。私はときには、最も簡単な解決策が見つからないことがあると思う。lol – MWD

+0

私はRichardsソリューションで私の質問を更新しているので、うまくいけば他の人を助けることができる。 – MWD

+0

お手伝いしてうれしい! :) –

0

モデルは正しいです。あなたは他のIDを作成する必要はありません。単にデータベースから引用符を選択し、日付順に並べ替える必要があります。ページで はsymplyこのように番号を生成:

@{var i = 0;} 
@foreach (var item in userQuotes){ 
    i++ 
    <tr> 
     <td>@i</td> // this will symply itterate rows for user. 
     <td>@item.ClientsName</td> 
     .... 
     <td>@item.AnyData</td> 
    </tr> 
} 

が、これはあなたを助けることを願っています。

関連する問題