使用實體框架代碼 - 首先我必須公開所有屬性來生成數據庫,這意味着使用實體框架代碼優先的方法我不得不將anemic domain與一個豐富的模型混合?因爲不需要公開的屬性必須是。使用實體框架代碼 - 首先,我需要讓我的域的模型貧血?
例如:
使用型號豐富,這在實體框架將不起作用:
public class Car
{
private int _actualPosition;
public void Accelerate()
{
this._actualPosition += 10;
}
}
要工作,我們需要做_actualPosition
市民:
public class Car
{
public int ActualPosition { get; set; }
public void Accelerate()
{
this.ActualPosition += 10;
}
}
現在實體國際海事組織是醜陋的,因爲我有一個方法,增加+10的財產,並在同一時間公開,我不想那個公關操作公開。
又如:
想象我想要一個關係多到很多,但與
只有一個辦法,如:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
}
我如何做一個多一對多的關係用那個模型?據我所知,沒有辦法,我必須做一個雙向關係:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
public IList<User> Users { get; set; }
}
有了這個模式,我就可以做出許多一對多的關係:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany(y => y.Users);
我對不對?如果是的話,實體框架是不討人喜歡的。
的「又如」與@Slauma的回答工作:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany()
.Map(a =>
{
a.MapLeftKey("UserId");
a.MapRightKey("RoleId");
a.ToTable("UserRoles");
});
你肯定不需要性質EF EDMX公開,所以我如果您首先爲EF代碼做過,會感到驚訝。是否真的沒有註釋或可用於指定所需屬性的東西?不過,我認爲你絕對需要訪問者。受保護或內部訪問者會工作嗎? (我原本以爲私人,但我懷疑至少需要保護它。) – Rup
@Rup:沒有沒有註釋。屬性不必是公共的,但它們必須對EF上下文和映射可見。 –
@Ladislav在這種情況下,你是否同意EF? –