如何使用breezejs和实体框架保存新实体并处理联结表实体

时间:2015-02-27 10:26:06

标签: entity-framework ef-code-first breeze

我们说我有以下三个表:

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<BookAuthor> BookAuthors { get; set; }
}

public class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<BookAuthor> AuthorBooks { get; set; }
}

public class BookAuthor
{
    public int Id { get; set; }
    public int BookId { get; set; }
    public Book Book { get; set; }

    public int AuthorId { get; set; }
    public Author Author { get; set; }
}

使用以下映射配置:

 public BookAuthorConfiguration()
    {
        // BookAuthor has a composite key: 
        HasKey(a => new { a.BookId, a.AuthorId });

        // BookAuthor has 1 Book, Books have many BookAuthor records
        HasRequired(a => a.Book)
            .WithMany(s => s.BookAuthors)
            .HasForeignKey(a => a.BookId)
            .WillCascadeOnDelete(false);

        // BookAuthor has 1 Author, Author have many BookAuthor records
        HasRequired(a => a.Author)
            .WithMany(p => p.AuthorBooks)
            .HasForeignKey(a => a.AuthorId)
            .WillCascadeOnDelete(false);
    }

我现在要做的是在我的交界处BookAuthor表中创建一本新书和一个新的注册表,我不知道微风自动做什么以及我自己要做什么。

如果已创建作者,我是否创建两个新实体,Book和BookAuthor,设置BookAuthor(BookId,AuthorId,Book,Author)的属性,然后推送新创建的Book实体的BookAuthors数组,或者我是这样做?

我希望我能为您提供足够的信息,如果不是让我知道缺少什么。

提前致谢!

1 个答案:

答案 0 :(得分:1)

微风不支持&#34;多对多&#34;所以你必须将联结表作为一个实体公开。 EF将强制执行此操作,因为您添加了支持m-to-m关系的FK以外的属性(Id)。

您必须自己在Breeze客户端上管理该联结实体。

在用户语音中有一个流行的Breeze支持m-to-m的请求。也就是说,我们并没有努力,我对尝试它的价值表示怀疑。

Search StackOverflow for "Breeze" and "many to many"你会发现很多讨论。