1

我正在Entity Framework 6使用Generic RepositoryDTOs。我想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的创建,没关系,但我必须从数据库重新获取。我想在一笔交易中做到这一点,就像这样:AssetIDAssetProject

    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 Entitieswith 访问包含相同的属性,但它们也实现INotifyPropertyChanged和其他WPF东西。所以我想我可以订阅CollectionChanged事件并从导航属性中手动创建/删除实体。在属性设置器中我可以调用更新,但我认为它会大大降低性能。

4

0 回答 0