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的原因与您在任何其他类上使用接口的原因相同。这个问题不可能回答,因为您根本不清楚为什么决定使用接口而不是具体类型,或者您希望通过这样做来实现什么。接口无法实例化。如果您查看数据库您将不会看到任何外键。