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)
您如何期望在数据库中表示标签?没有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)
无论您如何决定表示数据,都不会像在列表中添加列表那么简单.你必须考虑一下对你的应用程序最有意义的东西,这只是一个让你开始的想法,因为你的问题有点太模糊,无法提供完整的解决方案.
| 归档时间: |
|
| 查看次数: |
6069 次 |
| 最近记录: |