![](/img/trans.png)
[英]How to add/delete fields dynamically using Entity Framework during runtime?
[英]How to delete related fields using Entity Framework
我有一個像這樣的對象:
public class MyObject
{
[Key]
public int Id { get; set; }
public string ExternalNumber { get; set; }
public virtual InternalProperties InProperties { get; set; }
public virtual ICollection<AdditionalPrice> PriceHistory{ get; set; }
}
和InternalProperties類:
public class InternalProperties
{
[Key]
public int Id { get; set; }
public string Field1{get; set;}
}
和PriceHistory:
public class AdditionalPrice
{
[Key]
public int Id { get; set; }
public double? Price { get; set; }
}
我的上下文看起來像這樣:
public class myContext : DbContext
{
static myContext ()
{
Database.SetInitializer<myContext >(null);
}
public myContext ()
: base("myCtx")
{
}
public DbSet<MyObject> Objects{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<myObject>().HasOptional(m => m.InProperties );
modelBuilder.Entity<myObject>().HasMany(m => m.PriceHistory);
}
}
最后我試圖像這樣刪除myObjects:
using (var _sdb = new MyContext())
{
_sdb.Configuration.AutoDetectChangesEnabled = false;
var myList = _sdb.Objects.Where(m => m.Id > 5).OrderBy(c => c.Id).ToList();
foreach(var obj in myList)
{
_sdb.Objects.Remove(obj)
}
}
_sdb.SaveChanges();
我在SaveChanges()中遇到此異常:
{“保存不為其關系公開外鍵屬性的實體時發生錯誤.EntityEntries屬性將返回null,因為無法將單個實體標識為異常源。通過公開可以更容易地處理保存時的異常實體類型中的外鍵屬性。有關詳細信息,請參閱InnerException。“}
內部例外說:
{“DELETE語句與REFERENCE約束沖突\\”FK_dbo.AdditionalPrice_dbo.MyObject_MyObject_Id \\“。沖突發生在database \\”myobject \\“,table \\”dbo.AdditionalPrice \\“,列'myObject_Id'。\\ r \\ n語句已被終止。“}
例外是非常明確的,但我不知道如何安全地刪除這些對象。 我感謝任何幫助。 提前致謝。
我想你需要這樣的東西:
var pricesToBeDeleted = _sdb.AdditionalPrices.Where(ap=>ap.MyObjectId == obj.Id);
_sdb.AdditionalPrices.Remove(pricesToBeDeleted);
_sdb.Objects.Remove(obj)
AdditionalPrices
的類型為DbSet<AdditionalPrice>
。 您應該在myContext
類中添加以下行:
public DbSet<AdditionalPrice> Objects{ get; set; }
關於AdditionalPrice
類,我沒有看到MyObject
的外鍵。 我想你錯過了那里的東西。 我的意思是你可能會有如下內容:
public class AdditionalPrice
{
[Key]
public int Id { get; set; }
public double? Price { get; set; }
public int MyObjectId { get; set; }
}
其中MyObjectId
是外鍵。 如果名稱MyObjectId
與相應的列名稱不同,則應更改它們,以便它們彼此匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.