【发布时间】:2012-12-09 23:13:25
【问题描述】:
我只是想在 POCO 中模拟一个数据模型。但我对一些事情有点困惑。让我们假设这个例子我将使用实体框架来实现 ORM。首先我有一个电话和地址类:
public class Phone
{
int Id { get; set; }
int Number { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string Suite { get; set; }
public string City { get; set; }
public string State { get; set; }
public int Zip { get; set; }
}
接下来我有一个 Person 和一个 Company 类:
public class Person
{
int Id { get; set; }
string FirstName { get; set; }
string MiddleName { get; set; }
string LastName { get; set; }
string Prefix { get; set; }
}
public class Company
{
int Id { get; set; }
int Name { get; set; }
}
假设我希望 Person 和 company 都拥有电话或地址列表,逻辑上我可能会从代码的角度考虑创建一个抽象类 AContact:
public abstract class AContact
{
ICollection<Phone> Phone { get; set; }
ICollection<Address> Address { get; set; }
}
然后让我的公司和个人继承这个:
public class Company : AContact
{
int Id { get; set; }
int Name { get; set; }
}
public class Person : AContact
{
int Id { get; set; }
string FirstName { get; set; }
string MiddleName { get; set; }
string LastName { get; set; }
string Prefix { get; set; }
}
或者我可以创建一个接口:
public interface IContact
{
ICollection<Phone> Phone { get; set; }
ICollection<Address> Address { get; set; }
}
并实现接口:
public class Company : IContact
{
public int Id { get; set; }
public int Name { get; set; }
public ICollection<Phone> Phone { get; set;}
public ICollection<Address> Address {get; set;}
}
现在我明白了抽象类和接口之间的区别。但是这应该如何实现实体框架的功能呢?从网上的一些搜索看来,从 4.1 开始,你不能做接口的事情,这是否意味着我必须使用抽象类?或者我是否只需要在我想使用它们的每个类中明确定义这两个属性?还有像 RavenDB 这样的东西在那里也能工作吗?
【问题讨论】:
标签: entity-framework interface abstract-class poco