实体框架5,MVC 4,代码优先 - 在类中保持列表<string>

nii*_*ico 0 c# asp.net-mvc entity-framework asp.net-mvc-4 asp.net-4.5

我的解决方案应该适用于:ASP.NET MVC 4,EF5,Code First,Visual Studio 2012 Express,SQL Server 2012 Express.

我需要用place对象存储许多标签.在另一个问题中,有人建议我使用List来实现这个目的:

asp.net MVC 4,标记地点 - 最佳实践(例如酒吧,商店,餐厅)

public List<String> Tags {get;set;}
Run Code Online (Sandbox Code Playgroud)

如果我只是添加它根本不会在数据库中持久化.我怎么能坚持下去?

谢谢.

更新

这需要多对多的关系 - 例如,一个地方可能被标记为Cafe和Cycle Shop.有许多咖啡馆和自行车商店.

   public class Place
   {
      public Place()
      {
         // Set default value of dateAdded to now
         DateAdded = DateTime.Now;
      }

      [ScaffoldColumn(false)]
      public virtual int PlaceID { get; set; }

      public virtual List<Tag> Tags { get; set; }

      [ScaffoldColumn(false)]
      [DisplayName("Date Added")]
      public virtual DateTime DateAdded { get; set; }

      [Required(ErrorMessage = "Place Name is required")]
      [StringLength(100)]
      public virtual string Name { get; set; }
      public virtual string URL { get; set; }

      [DisplayName("Contact Name")]
      public virtual string ContactName { get; set; }
      public virtual string Address { get; set; }
      public virtual string City { get; set; }

      [DisplayName("Post Code")]
      public virtual string PostCode { get; set; }
      public virtual string Website { get; set; }
      public virtual string Phone { get; set; }

      [EmailAddress(ErrorMessage = "Please enter valid email")]
      public virtual string Email { get; set; }
      public virtual string About { get; set; }
      public virtual string Image { get; set; }
   }
Run Code Online (Sandbox Code Playgroud)

eva*_*nal 5

您如何期望在数据库中表示标签?没有EF映射到List的本机SQL Server类型(更典型的映射是表的行到对象列表),因此您必须进行一些操作.如果你想要它是一个单元格(即一个字段),那么我会把它变成db中的nvarchar和代码中的字符串.

然后我会保留列表,因为它更容易处理代码并使用以下LINQ查询将列表转换为逗号分隔列表,该列表将是一个字符串,从那里它可以像任何其他字符串一样进入nvarchar.

string csl = myList.Aggregate((c, n) => c + "," + n));
Run Code Online (Sandbox Code Playgroud)

要回到你刚才的名单;

List<string> = csl.Split(',').ToList();
Run Code Online (Sandbox Code Playgroud)

无论您如何决定表示数据,都不会像在列表中添加列表那么简单.你必须考虑一下对你的应用程序最有意义的东西,这只是一个让你开始的想法,因为你的问题有点太模糊,无法提供完整的解决方案.