[英]Navigation Property without Declaring Foreign Key
我的所有模型至少包含兩個關聯。 在ef4中對此進行建模時,我只能通過使用流暢的界面在沒有第二個外鍵屬性的情況下執行此操作。 ForeignKey似乎是正確使用的屬性,除了它需要一個字符串參數。
所以我的問題是,你能擁有一個導航屬性並使用屬性聲明它嗎?
public class User : IAuditable
{
// other code
public virtual User Creator { get; set; }
public virtual User Modifier { get; set; }
}
我相信,不可能僅僅使用數據屬性來定義關系。 問題是EF的映射約定假設Creator
和Modifier
是同一個關系的兩端,但無法確定該關聯的主體和依賴是什么。 據我所知,在支持的屬性列表中,沒有選項可以使用數據注釋定義主體和從屬端。
除此之外,我猜你實際上想要兩個關系 ,兩者都有一個未在模型中公開的結束。 這意味着您的模型在映射約定方面是“非常規的”。 (我認為Creator
和Modifier
之間的關系實際上是無意義的 - 從語義的角度來看。)
因此,在Fluent API中,您需要這樣:
modelBuilder.Entity<User>()
.HasRequired(u => u.Creator)
.WithMany();
modelBuilder.Entity<User>()
.HasRequired(u => u.Modifier)
.WithMany();
因為User
可以是許多其他用戶記錄的創建者或修飾符。 對?
如果你想在沒有Fluent API且只有DataAnnotations的情況下創建這兩個關系,我認為你必須在模型中引入關聯的Many-Ends,如下所示:
public class User
{
public int UserId { get; set; }
[InverseProperty("Creator")]
public virtual ICollection<User> CreatedUsers { get; set; }
[InverseProperty("Modifier")]
public virtual ICollection<User> ModifiedUsers { get; set; }
[Required]
public virtual User Creator { get; set; }
[Required]
public virtual User Modifier { get; set; }
}
我在這里假設需要Creator
和Modifier
,否則我們可以省略[Required]
屬性。
我認為這是一個明顯的例子,使用Fluent API很有意義,並且比修改模型更好,只是為了避免Fluent配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.