我有以下场景:两个聚合实体,Entry和Tag。他们有很多关系,没有一方拥有另一方,但Entry需要拥有Entry和Tag之间的链接。基本上标签将继续存在,即使链接到它的所有条目都消失了,并且条目只应创建/删除链接本身,它不应该尝试在创建或删除时保留标记。
到目前为止,我还没有找到在EF 6中实现此目的的方法,但我的大部分经验都是使用Java和Spring Data / Hibernate。
public class Tag : AbstractEntity{
//public User User { get; private set; }
public string Name { get; internal set; }
[InverseProperty("Tags")]
public virtual ICollection<Entry> Entries {get; private set;}
protected Tag() { }
}
public class Entry : AbstractEntity
{
public string Desc { get; private set; }
public DateTime DateTime { get; private set; }
[InverseProperty("Entries")]
public virtual ICollection<Tag> Tags { get; set; }
protected Entry()
{
}
}
我的映射如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Entry>().HasMany<Tag>(x => x.Tags).WithMany(x => x.Entries).Map(m => m.MapLeftKey("EntryId").MapRightKey("TagID").ToTable("EntryTag"));
base.OnModelCreating(modelBuilder);
}