linq-to-sql中的一对多关系

时间:2013-11-04 23:22:20

标签: sql-server linq-to-sql

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

我遇到问题的是:

让我们说我想制作一个图书数据库,并且让我们说每本书可以分配多个名称(例如标题的翻译)。其中一个标题需要是主要的标题。

对我来说,似乎是一个明显的解决方案,就是为书籍制作一张桌子,为名字制作另一张桌子。名称获取BookId列,书籍获取MainNameId列,并且在外键设置之上,因此在我的应用程序中生成模型时,关系将正确设置。

然而,我的逻辑失败了,因为我无法在没有标题的情况下添加书籍而且我无法在数据库中首先添加标题而没有相关书籍。在数据库中添加一本书也可以添加第一个(和主标题)。

无论如何,我可以想一些解决这个问题的方法,但我想知道解决这个问题的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

您必须同时将两个记录保存到两个表中。 EntityFramework可以在1保存更改中为您完成,或者您可以先将记录添加到book表中,然后添加到names表中,并同时为它们执行“Save changes”。

这段代码应该这样做:

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();

    }
}