如何将集合与实体框架中另一个上下文中的实体进行映射

本文关键字:实体 上下文 映射 另一个 框架 集合 | 更新日期: 2023-09-27 17:57:02

我有这个EF实体

    public class Show
    {
        private ICollection<Country> _allowedCountries;
        public virtual ICollection<Country> AllowedCountries
        {
            get { return _allowedCountries ?? (_allowedCountries = new List<Country>()); }
            set { _allowedCountries = value; }
        }
}

其中国家/地区是来自另一个上下文的实体。

当我尝试读取属性允许的国家/地区时,我收到有关没有现有表的错误。

表 'db1.countries' 不存在

显示映射到 db1.show 表,国家/地区映射到 db2.国家/地区

我的地图国家/地区和显示表

    public class CountryMap : EntityTypeConfiguration<Country>
    {
        public CountryMap()
        {
            ToTable("countries", "db2");
//other non useful information
        }
    }
        public ShowMap()
        {
            ToTable("shows", "db1");
          HasMany(x => x.AllowedCountries) //I think problem here
                .WithMany()
                .Map(m =>
                {
                    m.ToTable("allowed_countries");
                    m.MapLeftKey("ShowID");
                    m.MapRightKey("CountryID");
                });
}

我认为该问题是由不正确的映射引起的 允许的国家

如何将集合与实体框架中另一个上下文中的实体进行映射

我认为你不能拥有来自不同上下文的相关实体。您可以考虑使用链接服务器(MS SQL 功能)使两个表对一个连接可见。

老实说,我认为你应该避免这种混乱。也许你应该问问自己,为什么你有两个背景。

一般来说,你应该从需要的那一刻起就打开一个上下文,并在完成后关闭它;中间的一切都在一个工作单元中完成。