0

ASP.NET MVC を使用して小さなアプリケーションを作成していますが、1 対多の関係の特定のバリアントを設計する方法を把握するのに問題があります。私は LinqToSQL を使用しているので、C# コードよりもテーブルの設計に関するものだと思いますが、データの使用方法が設計に影響を与える可能性がある場合に備えて言及しています。

私が問題を抱えているのはこれです:

本のデータベースを作成したいとしましょう。各本に複数の名前を割り当てることができるとしましょう (たとえば、タイトルの翻訳)。タイトルの 1 つをメインにする必要があります。

私にとって明らかな解決策と思われるのは、本用のテーブルと名前用の別のテーブルを作成することです。名前は BookId 列を取得し、本は MainNameId 列を取得し、その上に外部キーが設定されているため、アプリケーションでモデルが生成されると、関係がすぐに正しく設定されます。

ただし、最初にタイトルがないと本を追加できず、最初にデータベースに関連する本がないとタイトルを追加できないため、私のロジックは失敗します。データベースに本を追加すると、最初のタイトル (およびメイン タイトル) も追加されると想定されていました。

とにかく、この問題のいくつかの回避策を考えることができますが、これを解決する適切な方法は何だろうと思っていました.

4

1 に答える 1

0

両方のレコードを同時に 2 つのテーブルに保存する必要があります。EntityFramework は、変更を 1 回保存するだけでそれを行うことができます。または、最初にレコードを book テーブルに追加してから、names テーブルに追加し、両方に対して同時に「変更を保存」することもできます。

このコードはそれを行う必要があります:

public class Book
{
    public string BookId { get; set; }
    public string ISBN { get; set; }
    public IEnumerable<BookNames> Names { get; set; }
}

public class BookNames
{
    public string BookId { get; set; }
    public string BookName { get; set; }
    public string Language { get; set; }

}

public class Functions
{
    void createBook()
    {
        Book new_book=new Book();
        new_book.ISBN = "RandomISBN";
        new_book.Names = new IEnumerable<BookNames>() {
            new BookNames{BookName = "The Good Book", Language = "ENG"},
            new BookNames{BookName = "El buen libro", Language = "SPN"}
        };

        dbcontext db = new dbcontext();
        db.Books.Add(new_book);
        db.SaveChanges();

    }
}
于 2013-11-04T23:44:58.593 に答える