takachaa / .net-Framework

0 stars 0 forks source link

【MVC】リレーションについて #14

Open takachaa opened 7 years ago

takachaa commented 7 years ago

基本的なbelongsTo

image

注意する点は

Articleエンティティ側には以下を用意

[DisplayName(" コメント ")]
public virtual ICollection<Comment> Comments { get; set; }

Comentモデル側には以下を用意

public int? ArticleId { get; set; }  

[DisplayName(" 記事 ")]
public virtual Article Article { get; set; }

あとクラスに以下を定義しとく 参照された場合に表示するカラムの指定が必要です。

[DisplayColumn("Body")]
public class Comment
{
...
}

補足

ArticleId は外部キーとして認識されますがArticleCdとした場合には外部キーとして認識されません。 そのときは以下のようにしてあげえると外部キーとして認識してくれるそうです。

public int? ArticleCd { get; set; }  

[DisplayName(" 記事 ")]
[ForeignKey("ArticleCd ")]
public virtual Article Article { get; set; }

参考 http://www.buildinsider.net/web/bookaspmvc5/040401

takachaa commented 7 years ago

多対対の例

image

Authorエンティティ側には以下を用意

public class Author
{
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Book> Books { get; set; }
}

Bookエンティティ側には以下を用意

public class Book
{
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Title { get; set; }
        public virtual ICollection<Author> Authors { get; set; }
}

これだけでマイグレーション時には以下テーブルが作成される

・Authors ・Books ・BooksAuthors ※中間テーブル

Authorのビュー(detail)からその著者の本のタイトルを取得するには以下のようにすればとってこれる

@foreach (var book in Model.Books)
{
        <li class="list-group-item">@book.Title</li>
}

参考 http://blog.qaramell.com/iwate/10081

https://www59.atwiki.jp/knowledgebase/pages/15.html