我正在Entity Framework 6
使用Generic Repository
和DTOs
。我想entities
通过导航属性创建新的。这是我的模型:
public partial class Project
{
public Project()
{
this.ProjectAssets = new List<ProjectAsset>();
}
public int ProjectID { get; set; }
public string Name { get; set; }
public virtual ICollection<ProjectAsset> ProjectAssets { get; set; }
}
public partial class Asset
{
public Asset()
{
this.Revisions = new List<Revision>();
}
public int AssetID { get; set; }
public string Name { get; set; }
public short Type { get; set; }
public virtual ICollection<Revision> Revisions { get; set; }
}
public partial class ProjectAsset
{
public int MappingID { get; set; }
public int ProjectID { get; set; }
public int AssetID { get; set; }
public virtual Asset Asset { get; set; }
}
我已经创建了Project
. 如果我正在创建新Asset
的,然后从刚刚创建Project Asset
的创建,没关系,但我必须从数据库重新获取。我想在一笔交易中做到这一点,就像这样:AssetID
Asset
Project
Project.ProjectAssets.Add(new ProjectAsset(new Asset((short)type, fileName)));
ServiceLocator.Default.ResolveType<IPipeLine>().Update(Project);
public void Update<TEntity>(TEntity entity) where TEntity : class
{
var fqen = GetEntityName<TEntity>();
object originalItem;
var key = ((IObjectContextAdapter)DbContext).ObjectContext.CreateEntityKey(fqen, entity);
if (((IObjectContextAdapter)DbContext).ObjectContext.TryGetObjectByKey(key, out originalItem))
((IObjectContextAdapter)DbContext).ObjectContext.ApplyCurrentValues(key.EntitySetName, entity);
//DbContext.Entry(entity).State = EntityState.Modified;
}
但是SaveChanges
在数据库中没有记录之后,MappingID
仍然是 0。我认为ApplyCurrentValues
必须与Navigation Properties
. 有什么好的方法可以解决这个问题吗?
编辑:
我DAL
通过Business Entities
with 访问包含相同的属性,但它们也实现INotifyPropertyChanged
和其他WPF
东西。所以我想我可以订阅CollectionChanged
事件并从导航属性中手动创建/删除实体。在属性设置器中我可以调用更新,但我认为它会大大降低性能。