Entity Framework Sınıf ve Arayüz hiyerarşileri?

oy
11

Eğer sıradan bir arayüze paylaşmak ve her ikisi de aynı temel veritabanı tablosunda saklanır iki ilişkili sınıfları var. Ancak, Varlık Çerçeve Gerçekten iki farklı sınıfları gereken bir ortak sınıf oluşturur. Bunu nasıl çözebilirim? en iyisi bir arayüz yerine bir temel sınıf kullanmak mı? Nasıl bir masanın üzerinde eşleştirilmiş iki sınıfları sağlamaktır EF modeli değiştirebilirim?

Düzenleme: AccountType özelliği sınıfı tipini belirler; Kullanıcı ya da grubudur.

Bazı basit kod:

public interface IAccount
{
    string Name { get; set; }
    AccountType AccountType { get; set; }
}

public class GroupAccount : IAccount
{
    public string Name { get; set; }
    public GroupType GroupType { get; set; }
    public AccountType AccountType { get; set; }
}

public class UserAccount : IAccount
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public AccountType AccountType { get; set; }
}
Oluştur 09/12/2008 saat 17:05
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
14

Bu veriler ayrımcılık mı? yani hangi tip tanımlamak AccountType mi? Öyleyse:

  • EF depodan Hesap varlık yaratmak gerekir
  • Sonra 2 alt sınıfları (KullanıcıHesabı ve GroupAccount) oluşturmak
  • Hesap için eşlemlemesinde, "bir koşul ekleyin" bir yüklemi belirtmek
    • o AccountType (depolama) alan 1 olduğu useraccount eşleme (veya ne olursa olsun) sahip
    • o AccountType (depolama) alan 2 olduğu GroupAccount eşleme (veya ne olursa olsun) sahip

(Değilse bunun unmap) hesap türü daha sonra tamamen Hesap nesneden kaybolur. Kullanmak, sadece KullanıcıHesabı kayıtlarını almak için

 .Accounts.OfType<UserAccount>()...

Hesap sınıfı muhtemelen bu modelde soyut olmalıdır. arayüz malzeme kısmi bir sınıf ile eklenebilir - bir ayrı dosyada, yani tanımlamak:

partial class Account : IAccount {
   // extra code here
}

vb

Makul değerlendirmeler yapılıyor burada .

Cevap 09/12/2008 saat 17:09
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more