我只是想在 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 这样的东西也可以在那里工作吗?