0

академический Пример: Простой Пометка механизм - asp.net/MVC5ASP.NET MVC Deep Model Relationship? MVC5

Модели:

// post 
public class Post 
{ 
    public Int64 Id { get; set; } 
    public string Title { get; set; } 
    public virtual IList<TagMap> TagMaps { get; set; } 
} 

// tag 
public class Tag 
{ 
    public Int64 Id { get; set; } 
    public string Name { get; set; } 
    public virtual Post Post { get; set; } 
} 

// tagmap 
public class TagMap 
{ 
    public Int64 Id { get; set; } 
    public virtual Post Post { get; set; } 
    public virtual Tag Tag { get; set; } 
} 

TagTable содержит одиночные tagwords (без дубликатов). TagMap представляет связь между сообщениями и (многими) тегами.

Я думаю, что этот простой дизайн должен работать или нет? Но я не знаю, как настроить представления для редактирования и создания тегов (а не tagmaps).

Любая помощь будет приятной.

ответ

1

Кажется, что вы достигаете отношения «один ко многим». (Один пост, много тегов) ..

Вы можете иметь его с этим ..

public class Post 
{ 
    [Key] 
    public Int64 PostId { get; set; } 
    public string Title { get; set; } 
} 

public class Tag 
{ 
    [Key] 
    public Int64 TagId { get; set; } 
    public string Name { get; set; } 
} 

public class TagMap 
{ 
    public Int64 PostId { get; set; } 
    public Int64 TagId { get; set; } 

    [ForiegnKey("PostId")] 
    public virtual Post Post { get; set; } 
    [ForiegnKey("TagId")] 
    public virtual Tag Tag { get; set; } 
} 

принять к сведению, что вам не нужно отложенной загрузки на двух столах, так что вы на самом деле ссылаются его tagmap таблицу.

0

Хорошо звучит хорошо.

Я изменил модель на:

public class Post 
{ 
    [Key] 
    public Int64 Id { get; set; } 
    public string Title { get; set; } 
    public IList<TagMap> TagMaps { get; set; } 
} 

В методе индексной PostsController:

var posts = db.Posts.Include(m => m.TagMaps.Select(n => n.Tag)); 

И вид:

@for (int i = 0; i < item.TagMaps.Count; i++) 
{ 
    @Html.Raw(item.TagMaps[i].Tag.Name); 
} 

Это работает как шарм.