C# 使用POCO对象的接口?

C# 使用POCO对象的接口?,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我正在尝试在我的最新应用程序中加入接口。对于简单的类来说,这看起来很简单,但是对于有关系的类来说,事情似乎变得很奇怪。使用具有关系的类的接口的正确方法是什么? 我的界面: public interface IAgent { string FirstName { get; set; } int Id { get; set; } string LastName { get; set; } IEnumerable<IT

我正在尝试在我的最新应用程序中加入接口。对于简单的类来说,这看起来很简单,但是对于有关系的类来说,事情似乎变得很奇怪。使用具有关系的类的接口的正确方法是什么? 我的界面:

   public interface IAgent
    {
        string FirstName { get; set; }
        int Id { get; set; }
        string LastName { get; set; }
        IEnumerable<ITeam> Teams { get; set; }
    }

   public interface ITeam
    {
        string Name { get; set; }
        int Id { get; set; }
        IEnumerable<IAgent> Agents { get; set; }
    }
公共接口IAgent
{
字符串名{get;set;}
int Id{get;set;}
字符串LastName{get;set;}
IEnumerable团队{get;set;}
}
公共接口ITeam
{
字符串名称{get;set;}
int Id{get;set;}
IEnumerable代理{get;set;}
}
我的课程最终是:

   public class Agent : IAgent
      { 
       public Agent()
        {
            Teams = new HashSet<Team>();
        }
        public string FirstName { get; set; }
        public int Id { get; set; }
        public string LastName { get; set; }
        public virtual IEnumerable<ITeam> Teams { get; set; }
      }
     public class Team : ITeam
      {
       public Team()
       {
        Agents = new HashSet<Agent>();
       }
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual IEnumerable<IAgent> Agents { get; set; }
      }
公共类代理:IAgent
{ 
公职人员()
{
Teams=newhashset();
}
公共字符串名{get;set;}
公共int Id{get;set;}
公共字符串LastName{get;set;}
公共虚拟IEnumerable团队{get;set;}
}
公共班级小组:ITeam
{
公共团队()
{
Agents=newhashset();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟IEnumerable代理{get;set;}
}
以这种方式构造的POCO类不会使用代码优先迁移创建关系表

和我的上下文类:

  public class SDRContext :DbContext
{
    public SDRContext():base("SDRContext")
    {
    }
    public DbSet<Agent> Agents { get; set; }
    public DbSet<Team> Teams { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("SDR");
        base.OnModelCreating(modelBuilder);
    }
}
公共类SDRContext:DbContext
{
公共SDRContext():基(“SDRContext”)
{
}
公共数据库集代理{get;set;}
公共DbSet团队{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema(“SDR”);
基于模型创建(modelBuilder);
}
}

您觉得奇怪的是什么?将public IEnumerable代理{get;set;}更改为虚拟的,这样public virtual ICollection代理{get;set;}也可以尝试让DbSet引用具体类型而不是接口,并可以在代码中使用接口进行依赖项注入等。但这不是一个要求。@BenCottrell的原因与您在任何其他类上使用接口的原因相同。这个问题不可能回答,因为您根本不清楚为什么决定使用接口而不是具体类型,或者您希望通过这样做来实现什么。接口无法实例化。如果您查看数据库您将不会看到任何外键。