私は単にPOCOでデータモデルをモックアップしようとしています。しかし、私は何かについて少し混乱しています。この例では、ORMにEntityFrameworkを使用すると仮定します。まず、電話と住所のクラスがあります。
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; }
}
個人と会社の両方に電話リストまたは住所リストを持たせたいので、コードの観点からこれについて論理的に考えると、抽象クラス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;}
}
ここで、抽象クラスとインターフェースの違いを理解しました。しかし、これはEntity Frameworkが機能するためにどのように実装されると想定されていますか?Webで少し検索すると、4.1の時点ではインターフェイスの機能を実行できないようです。つまり、抽象クラスを使用する必要があるということですか?または、使用するすべてのクラスで両方のプロパティを明示的に定義する必要がありますか?また、RavenDBのようなものもここで機能しますか?