0
我的實體模型。它的DB第一種方法。實體框架未保存記錄加入表
public partial class Provider
{
public Provider()
{
this.ProviderSubCatetogryOnes = new HashSet<ProviderSubCatetogryOne>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProviderSubCatetogryOne> ProviderSubCatetogryOnes { get; set; }
}
public partial class SubCategoryOne
{
public SubCategoryOne()
{
}
public int Id { get; set; }
public string Name { get; set; }
}
public partial class ProviderSubCatetogryOne
{
public int Id { get; set; }
public int ProviderId { get; set; }
public int SubCategoryOneId { get; set; }
public virtual Provider Provider { get; set; }
public virtual SubCategoryOne SubCategoryOne { get; set; }
}
我有供應商和分類。我必須通過選擇一些類別來更新我的提供商。
我正在嘗試通過以下操作。
var provider = GetProvider(); // Returns a Provider Object.
provider.SubCategoryOnes.Add(new ProviderSubCategoryOne()
{
SubCategoryOneId = childCategoryId // existing category id.
});
但是,當我嘗試保存提供程序時,我的連接表沒有填充任何記錄。
以下是我用於保存的代碼。
public virtual void Update(TDomainModel item)
{
_logger.Info("In Update.");
if (item == null)
throw new ArgumentNullException("item");
try
{
var entity = ToDataEntity(item);
DbEntityEntry dbEntityEntry = Context.Entry(entity);
try
{
if (dbEntityEntry.State == EntityState.Detached)
{
Context.Set<TEntityModel>().Attach(entity);
dbEntityEntry.State = EntityState.Modified;
}
}
catch (InvalidOperationException ex)
{
_logger.Error(ex);
_logger.Info("Trying to update by setting the values to CurrentEntity");
if (item as IUniqueId != null)
{
_logger.Warn("Model is an IUniqueId object. Trying to update by using SetValues.");
TEntityModel oldEntity = CurrentDbSet.Find((item as IUniqueId).Id);
Context.Entry(oldEntity).CurrentValues.SetValues(entity);
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
_savedRecord = entity;
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
public void Save()
{
try
{
_context.SaveChanges();
}
catch (DbEntityValidationException ex)
{
_logger.Error(ex.Message);
foreach (DbEntityValidationResult validationResult in ex.EntityValidationErrors)
{
foreach (DbValidationError validationError in validationResult.ValidationErrors)
{
_logger.Error(validationError.PropertyName+": "+validationError.ErrorMessage);
}
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
有什麼建議嗎?
數據庫或代碼第一?無論哪種情況,請爲您的派生DbContext提供代碼。 –
我上次檢查Code-First時不支持這種情況。您有責任跟蹤更改並自行更新所有導航屬性。我通過混合和自適應[自我跟蹤實體](http://msdn.microsoft.com/en-us/data/jj613924.aspx)到Code-First來創建一個可怕的科學怪人怪獸來解決這個問題。不要在家裏嘗試。 –
您如何保存更改?你是否在'myContext.SaveChanges()'的任何地方有一些東西? – Bruno