如何在實體框架7中配置一對一或零或一對一關係代碼首先使用數據註釋或流利API?實體框架中的一對一關係7代碼優先
回答
可以在實體框架7使用流利的API定義OneToOne關係如下
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<BlogImage> BlogImages { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasOne(p => p.BlogImage)
.WithOne(i => i.Blog)
.HasForeignKey<BlogImage>(b => b.BlogForeignKey);
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public BlogImage BlogImage { get; set; }
}
public class BlogImage
{
public int BlogImageId { get; set; }
public byte[] Image { get; set; }
public string Caption { get; set; }
public int BlogForeignKey { get; set; }
public Blog Blog { get; set; }
}
而一些不明顯的如果你希望BlogImage與Blog有一個到零或一個關係,而不是一對一(也就是說它自己有一個BlogImage,可選擇的沒有引用一個Blog,你只需要使BlogImage.BlogForeignKey爲空即可,如下所示:public int?BlogForeignKey {get; set;} –
這個屬性真的需要嗎?'public int BlogForeignKey {get; set;}' –
以上的答案是絕對正確的。
只是爲了讀者的信息:這已經很好地在official documentation
1對一個
一對一的關係解釋有兩面參考導航屬性。它們遵循與一對多關係相同的約定,但是在外鍵屬性上引入了唯一索引,以確保只有一個依賴關係與每個主體關聯。
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public BlogImage BlogImage { get; set; }
}
public class BlogImage
{
public int BlogImageId { get; set; }
public byte[] Image { get; set; }
public string Caption { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
注意
EF會選擇實體之一是基於它能夠探測到一個外鍵屬性能力的依賴。如果選擇了錯誤的實體作爲依賴項,則可以使用Fluent API來更正此問題。
我真的需要定義這個屬性嗎?'public int BlogId {get; set;}' –
@MohammedNoureldin屬性'public int BlogId {get; set;}'是需要的,因爲''EF會選擇一個實體根據其檢測外鍵屬性的能力成爲依賴關係。「請參閱一對一部分中https://docs.microsoft.com/en-us/ef/core/modeling/relationships中的說明。其他關係模式。 –
- 1. 簡單的一對一關係實體框架代碼優先
- 2. 實體框架代碼優先一對一的關係
- 3. 實體框架代碼優先 - 關係
- 4. 實體框架代碼中的一對一關係代碼優先
- 5. 實體框架代碼優先:一對多關係(空列表)
- 6. 實體框架5中的一對一和一對多關係代碼優先
- 7. 實體框架代碼優先一比一的關係
- 8. 實體框架中的多對多關係代碼優先6
- 9. 實體框架代碼首先一對一所需的關係
- 10. 實體框架代碼優先:一對一的關係不產生外鍵
- 11. 實體框架代碼優先多對多的一個實體
- 12. 實體框架在Web.API中的代碼優先一對多關係
- 13. 實體框架代碼優先,一對零對一和一對多關係到同一個實體
- 14. 實體框架4.1代碼優先並插入新的一對多關係
- 15. 實體框架代碼優先,同一個表上的多對多關係
- 16. 實體框架中的雙向關係(代碼優先)
- 17. 實體框架中的一次性實體代碼優先
- 18. 實體框架代碼優先一對一約束衝突
- 19. 如何使用ADO.NET實體框架代碼優先創建一對多關係?
- 20. 一對一的關係 - 代碼優先
- 21. 實體框架代碼優先 - 定義與MembershipUser的關係
- 22. 實體框架代碼優先 - Definining兩種不同的關係
- 23. 實體框架代碼第一關係
- 24. 實體框架代碼第一個雙一對一的關係
- 25. SQL表關係(實體框架代碼優先)
- 26. 實體框架代碼優先 - 外鍵關係
- 27. 實體框架5代碼優先自引用關係
- 28. 代碼優先實體框架關係始終爲空
- 29. 實體框架1:1關係代碼優先
- 30. 實體框架6代碼優先關係/表創建問題
閱讀這篇文章(http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx) –