SORU
4 NİSAN 2011, PAZARTESİ


Nasıl Yabancı Anahtar İlişkileri Kod İlk Varlık Çerçevesi (4.1) MVC3 Kullanarak İlan Etmeli miyim?

Anahtar ilişkileri ve diğer kısıtlamaları yabancı hiç ümidim yok ama kodu ilk EF 4.1 kullanarak ilan hakkında kaynak arıyordum. Temelde kod veri model geliştirme ve MVC3 model sorgulamak için kullanıyorum. Her şey harika olan MVC (Microsoft şeref!) çalışıyor ama şimdi veri modeli kısıtlamaları gerekiyor, çünkü bu iş için DEĞİL istiyorum.

Örneğin, dış nesneler özellikleri bir ton (tablo) olan Sipariş bir nesne var. Şu anda bir Emir sorun değil, ama yabancı anahtarı veya harici nesneler eklemek mümkün olmadan oluşturabilirsiniz. MVC3 bu sorun ayarlar.

Sadece nesneleri kendimi ekleyebilirim o denetleyici sınıfı kurtarmak için önce fark ettim, ama telefonu DbContext etmek istiyorum.() SaveChanges eğer kısıtlama ilişkileri karşılandığından değil. başarısız

YENİ BİLGİ

Yani, özellikle, istiyorum ben girişimi ortaya istisna Emir kaydetmek olmadan nesne bir müşteri belirten nesne. Bu eğer davranış gibi görünmüyor açıklandığı gibi sadece nesneleri oluştur birçok Kod İlk EF belgelerinde.

Son kod:

public class Order
{
    public int Id { get; set; }

    [ForeignKey( "Parent" )]
    public Patient Patient { get; set; }

    [ForeignKey("CertificationPeriod")]
    public CertificationPeriod CertificationPeriod { get; set; }

    [ForeignKey("Agency")]
    public Agency Agency { get; set; }

    [ForeignKey("Diagnosis")]
    public Diagnosis PrimaryDiagnosis { get; set; }

    [ForeignKey("OrderApprovalStatus")]
    public OrderApprovalStatus ApprovalStatus { get; set; }

    [ForeignKey("User")]
    public User User { get; set; }

    [ForeignKey("User")]
    public User Submitter { get; set; }

    public DateTime ApprovalDate { get; set; }
    public DateTime SubmittedDate { get; set; }
    public Boolean IsDeprecated { get; set; }
}

Bu VS Hasta için Görünüm oluşturulan şimdi aldığım hata:

HATA İLETİSİ

Özellik ForeignKeyAttribute 'Hasta' tür 'PhysicianPortal.Modelleri.'Emir almıyorum geçerli. Yabancı anahtar adı 'Ana' bağımlı türü bulunamadı 'PhysicianPortal.Modelleri.'Siparişi verdim. Bu Adı değer bir virgül ile ayrılmalıdır yabancı anahtar özellik adlarının listesi.

Saygılar,

Guido

CEVAP
4 NİSAN 2011, PAZARTESİ


Eğer Order bir sınıf varsa, Eğer model başka bir sınıf, örneğin 10 ** başvurular EF izin için yeterli olması gereken bir özellik ekleyerek bir ilişki var:

public class Order
{
    public int ID { get; set; }

    // Some other properties

    // Foreign key to customer
    public virtual Customer Customer { get; set; }
}

Her zaman FK ilişki açıkça ayarlayabilirsiniz:

public class Order
{
    public int ID { get; set; }

    // Some other properties

    // Foreign key to customer
    [ForeignKey("Customer")]
    public string CustomerID { get; set; }
    public virtual Customer Customer { get; set; }
}

Eğer yabancı anahtar özelliği üzerine yerleştirin eğer ilişkili navigasyon özelliği adını temsil eder. ForeignKeyAttribute yapıcı bir parametre olarak bir dize alır: Eğer navigasyon özelliği üzerine yerleştirin eğer ilgili yabancı anahtar adı temsil eder.

Bu ne demek Customer özelliği ForeignKeyAttribute sizin için öznitelik oluşturucu CustomerID alacaktı: eğer

public string CustomerID { get; set; }
[ForeignKey("CustomerID")]
public virtual Customer Customer { get; set; }

Göre DÜZENLEYİNEn Son Kodu Bu satır yüzünden hata alıyorum:

[ForeignKey("Parent")]
public Patient Patient { get; set; }

EF Yabancı Anahtar kiralık katil olarak kullanmak için bir özellik Parent adlı arayacaktır. 2 şey yapabilirsiniz:

1) ForeignKeyAttribute Kaldır ve gerekli olarak ilişki işaretlemek için RequiredAttribute ile değiştirin

[Required]
public virtual Patient Patient { get; set; }

RequiredAttribute da güzel bir yan etkisi olan bir gayrimenkul dekorasyon: veritabanında ilişki ON DELETE CASCADE ile oluşturulur.

Ayrıca özelliği virtual Tembel Yükleme etkinleştirmek için yapım, tavsiye ederim.

2) Yabancı Anahtar olarak hizmet verecek bir özellik Parent Oluşturun. Bu durumda muhtemelen örneğin aramak daha mantıklı ParentID (ForeignKeyAttribute adını değiştirmek için de gerekir) yapar:

public int ParentID { get; set; }

Bu durumda benim durumumda daha iyi, ama tam tersi için çalışır:

[ForeignKey("Patient")]
public int ParentID { get; set; }

public virtual Patient Patient { get; set; }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ELawshea

    ELawshea

    26 Mayıs 2008
  • engineerguy

    engineerguy

    10 Ocak 2010
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007