Как использовать одну таблицу для двух разных контекстов в двух разных доменах? - PullRequest
0 голосов
/ 24 апреля 2019

У меня разные контексты в двух разных доменах, и каждый домен содержит сущность "страна".Обе сущности должны использовать одну и ту же таблицу "страна".Одна сущность содержит свойства xzy, а другая содержит свойства xz.Контексты не знают друг друга.Проблема в том, что я получаю сообщение об ошибке: «В базе данных уже есть объект с именем« Страна »».Каков наилучший подход в этом случае, пожалуйста?Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Обычно сущность принадлежит только одному контексту / домену. если вам нужен этот объект в другом домене, просто используйте контекст, в котором он определен. Нет ничего плохого в использовании нескольких контекстов в транзакции. То, что вы пытаетесь сделать, концептуально и технически не рекомендуется, даже если это возможно.

0 голосов
/ 25 апреля 2019

Если вы хотите разделить данные страны между двумя доменами, тогда «Страна» логически считается другим доменом. Ссылка на запись страны по ее идентификатору вместо междоменной привязки, что является ужасной практикой в ​​DDD.

0 голосов
/ 24 апреля 2019

Вам необходимо изменить имя сгенерированной таблицы: Как указать сопоставление основной таблицы Entity Framework?

Либо использовать:

[Table("CountriesCustomTableName")]
public class Country{ x, y, z }

, либо переопределить OnModelCreatingвот так:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Country>(entity => {
        entity.ToTable("CountriesCustomTableName");
    });
}

Не забудьте полностью указать имена классов, иначе вы запутаетесь или получите неоднозначные ошибки компиляции

Редактировать

ЕслиВы пытаетесь отобразить две разные модели сущностей в одну и ту же таблицу. Похоже, что ваш шаблон или дизайн могут быть улучшены.

Я бы посоветовал вам либо использовать полную модель предметной области, но только половинуЗаполните его, когда вы вводите свою «полудоменную модель»

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);
...