0

我正在使用 ASP.NET MVC 编写一个小型应用程序只是为了好玩,但是我在掌握如何设计一对多关系的一个特定变体时遇到了问题。由于我使用的是 LinqToSQL,我想它更多的是关于设计表而不是我的 C# 代码,但我提到它是为了以防数据的使用方式可能会影响设计。

我遇到的问题是:

假设我想创建一个图书数据库,假设每本书可以分配多个名称(例如标题的翻译)。其中一个标题必须是主要标题。

对我来说,显而易见的解决方案是为书籍制作一张桌子,为名字制作另一张桌子。名称获得 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 回答