[英]How to use one table for two different contexts in two different domains?
我在兩個不同的域中有不同的上下文,並且每個域都包含一個實體“國家”。 兩個實體應使用相同的表“國家/地區”。 一個實體包含xzy屬性,另一個包含xz屬性。 上下文彼此不認識。 問題是我遇到了錯誤:“數據庫中已經有一個名為'Country'的對象。” 在這種情況下,最好的方法是什么? 先感謝您。
通常,一個實體僅屬於一個上下文/域。 如果您需要在另一個域中使用此實體,則只需使用其定義的上下文。在事務中使用多個上下文沒有任何問題。 即使可能,從概念上和技術上,我們也不建議您嘗試做的事情。
您需要更改生成的表的名稱: 如何指定實體框架核心表映射?
可以使用:
[Table("CountriesCustomTableName")]
public class Country{ x, y, z }
或像這樣重寫OnModelCreating:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Country>(entity => {
entity.ToTable("CountriesCustomTableName");
});
}
請記住要完全限定您的班級名稱,否則您會感到困惑或出現模棱兩可的編譯錯誤
編輯
如果您嘗試將2個不同的實體模型映射到同一張表,這聽起來像是您的模式或設計可以得到改善。
我建議您要么使用完整的域模型,要么在輸入“半域模型”時填充一半
public class Country {
public string X { get; set; }
public string Y { get; set; }
public string Z { get; set; }
}
var country1 = new Country() { X = "A", Y = "B", Z = "C" };
var country2 = new Country() { X = "A", Z = "C" };
context.Countries.Add(country1);
context.Countries.Add(country2);
或者(更有可能)這是某種形式的代碼氣味,您需要將可選值抽象到另一個表中,例如:
public class Country {
public string X { get; set; }
public string Z { get; set; }
}
public class CountryYInfo {
public string Y { get; set; }
public Country Country { get; set; }
public int CountryId { get; set; }
}
var country1 = new Country() { X = "A", Z = "C" };
var countryInfo = new CountryYInfo { Y = "B", Country = country1 };
var country2 = new Country() { X = "A", Z = "C" };
context.Countries.Add(country1);
context.Countries.Add(country2);
如果要在兩個域之間共享國家/地區數據,則“國家/地區”在邏輯上被視為另一個域。 通過ID而不是域間引用來引用國家/地區記錄,這在DDD中是很糟糕的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.