C# 如何从EF Core 2.0中的不同程序集创建一对一关系

C# 如何从EF Core 2.0中的不同程序集创建一对一关系,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我想在我的项目中使用简单的表拆分来了解这一点,但如何在不同的程序集中实现这一点? 我有两个类库,分别命名为MyApp.Core和MyApp.CommerceService 在.Core项目中,我拥有用户实体: public partial class User { public long UserId { get; set; } public string Username { get; set; } public string E

我想在我的项目中使用简单的表拆分来了解这一点,但如何在不同的程序集中实现这一点?
我有两个类库,分别命名为
MyApp.Core
MyApp.CommerceService

.Core
项目中,我拥有
用户
实体:

  public partial class User
    {
        public long UserId { get; set; }

        public string Username { get; set; }

        public string Email { get; set; } 

        public Customer Customer { get; set; } 
    }
  public partial class Customer
    {
        private ICollection<Address> _addresses;

        public Customer()
        {
            this.CustomerGuid = Guid.NewGuid();
        }

        public long UserId { get; set; } 

        public User User { get; set; } 

        public Guid CustomerGuid { get; set; }

        public int VendorId { get; set; }

        public virtual Address BillingAddress { get; set; }

        public virtual Address ShippingAddress { get; set; }

        public virtual ICollection<Address> Addresses
        {
            get { return _addresses ?? (_addresses = new List<Address>()); }
            protected set { _addresses = value; }
        }
    }
.CommerceService
中,我有
客户
实体:

  public partial class User
    {
        public long UserId { get; set; }

        public string Username { get; set; }

        public string Email { get; set; } 

        public Customer Customer { get; set; } 
    }
  public partial class Customer
    {
        private ICollection<Address> _addresses;

        public Customer()
        {
            this.CustomerGuid = Guid.NewGuid();
        }

        public long UserId { get; set; } 

        public User User { get; set; } 

        public Guid CustomerGuid { get; set; }

        public int VendorId { get; set; }

        public virtual Address BillingAddress { get; set; }

        public virtual Address ShippingAddress { get; set; }

        public virtual ICollection<Address> Addresses
        {
            get { return _addresses ?? (_addresses = new List<Address>()); }
            protected set { _addresses = value; }
        }
    }
公共部分类客户
{
专用ICollection\u地址;
公众客户()
{
this.CustomerGuid=Guid.NewGuid();
}
公共长用户标识{get;set;}
公共用户{get;set;}
公共Guid CustomerGuid{get;set;}
public int VendorId{get;set;}
公共虚拟地址计费地址{get;set;}
公共虚拟地址ShippingAddress{get;set;}
公共虚拟ICollection地址
{
获取{返回_地址???(_地址=新列表());}
受保护集{u addresses=value;}
}
}
如果将
客户
实体放置在
核心
项目中,则可以这样做。现在我在添加程序集引用时遇到了问题,因为这会导致循环。
我是学生,请给我一点提示。谢谢。

您的问题在于项目的循环依赖性。解决这个问题的最简单方法是将您的所有实体提取到另一个项目中。我将创建一个新项目MyApp.entities或MyApp.DataAccess


将您的所有实体放在这个项目中,然后您可以从core和CommerceService引用这个项目。我还建议将任何与EF相关的文件(如上下文)移到此处。

这与EF Core没有任何共同之处。只是不能有两个程序集相互引用。如果需要相互引用对象,那么使用单独的程序集有什么意义?@IvanStoev Nothing只是想了解更多。你怎么能解决这个问题?我不会。与其试图解决无法解决的问题,我会消除问题的根源,也就是说,不会对相关数据使用单独的程序集。感谢您的回答,但在我的教程项目计划中,这会产生难看的代码。因为我使用的是ABP框架,很多实体都来自该框架。我想做一个简单的模块化应用程序。所以一个模块应该有自己的实体。@CS初学者,这在什么方面是丑陋的?如果你有一个框架中的实体,你可以把它们放在一边,不管它们是什么意思,你都可以把它们分开。用户实体来自框架,所以我需要把我的客户实体放在用户程序集中。然后,我需要将所有商业实体也放置在实体与客户有关系的地方。那就难看了code@CS-初学者如果你有一个循环依赖,这只是一个糟糕的代码。您需要将您的实体分离到不同的项目中以允许引用它们,或者您需要将您的逻辑移动到另一个可以引用您的核心项目和商业项目的项目中。谷歌多层架构在维基百科上发表了一篇精彩的文章。