簡體   English   中英

如何在兩個不同域中的兩個不同上下文中使用一個表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM