我在DB中有2个表之间的多对多关系。我首先从Db使用EF代码。
表流派:
public partial class Genres
{
public Genres()
{
Post = new HashSet<Post>();
}
public int GenresID { get; set; }
[StringLength(90)]
public string GenresName { get; set; }
[StringLength(128)]
public string GenresSlug { get; set; }
[StringLength(200)]
public string GenresDescription { get; set; }
public virtual ICollection<Post> Post { get; set; }
}
表发布:
public partial class Post
{
public Post()
{
Genres = new HashSet<Genres>();
}
public int PostID { get; set; }
[Display(Name = "Title")]
[Required]
[StringLength(150)]
public string Name { get; set; }
[AllowHtml]
[Display(Name = "Description")]
[Column(TypeName = "text")]
public string Description { get; set; }
[Display(Name = "Publish Date")]
public DateTime PublishDate { get; set; }
[Display(Name = "Genres")]
[Required]
[StringLength(200)]
public string GenresList { get; set; }
public virtual ICollection<Genres> Genres { get; set; }
}
现在我有两个问题:
1- 如何从此关系创建的表GenresPost中删除值?仅从GenresPost上,我不想删除我的帖子或因此而受到影响。
2-在我的流派表中添加新帖子时,我从这样的文本字段中获得了流派:
戏剧,浪漫,首尔
然后我将它们拆分并添加,但是它们在数据库中不断重复,我需要它们是唯一的,因此当我在其中添加例如Drama并在其他帖子中再次添加它时,我想检查它是否存在我不需要再次添加它..这是我的代码,但是对我来说不起作用:
post.GenresList包含这样的流派(戏剧,浪漫,少女)
if (post.GenresList != null)
{
Collection<Genres> GenresPost = new Collection<Genres>();
var s = post.GenresList.ToString();
string[] newGenres = s.Split(',');
foreach (var val in newGenres)
{
var iTag = db.Genres.FirstOrDefault(t => t.GenresName == val);
if (iTag == null && val.Length > 1)
{
iTag = new Genres
{
GenresName = val.Trim(),
GenresSlug = val.MakeUrlFriendly2(),
};
db.Genres.Add(iTag);
}
GenresPost.Add(iTag);
}
post.Genres = GenresPost;
}