2013-09-05 17 views
11

Entity Framework jargon'unda bir "model" ile "içerik" arasındaki fark nedir?Entity Framework jargon'unda "Model" ile "İçerik" arasındaki fark nedir?

Bir uygulamada Entity Framework veritabanı ilk yaklaşımını kullanıyorum. EF uygulama stratejileri hakkında farklı forum ve makaleler okurken bu terimler pek çok kez ortaya çıktı. Bu ikisinin ne kadar farklı olduğunu anlayamıyorum (sadece çerçeve çerçeveyle değil, genel olarak yazılım geliştirme ile bile). İnsanlar kelimeleri sanki farklıymış gibi kullanırlar, ama sonra bazı insanlar kelimeleri birbirinin yerine kullanabilir.

+0

'DbContext' sınıfı, EF'de kullanılan veritabanı sorgulamasına izin veren temel sınıftır.MVC anlamındaki model, varlıkları (ayrıca adlandırılmış modeller) ve veritabanı bağlantılarını içeren genel etki alanına başvurabilir veya temelde verilerinizi temsil etmek için kullanılan bir sınıfı ifade ettiği bir modele başvurabilir (örneğin, "Kişi".). –

cevap

8

Bağlam

Bu kolaydır. Bağlam, varlık çerçevesi veri erişim katmanının çekirdeği olan DbContext veya daha eski olan ObjectContext sınıfıdır. Güçlü bir şekilde yazılan varlıklar kümesi aracılığıyla şeffaf veritabanı erişimi sağlar, değişiklikleri izler ve kaydeder, veritabanı işlemlerini ve bağlantılarını yönetir ve her türlü veri erişim görevini kolaylaştırmak için bir dizi yardımcı yöntem içerir (özellikle. DbContext).

Modeli

Bu iki (ya da üç) şeyler olabilir.

  • Veri modeli veya mağaza modeli. EF veri erişim katmanının altında yatan veritabanının ilişkisel modeli hangisidir.
  • Kavramsal model veya sınıf modeli. Veritabanını temsil eden .Net sınıf modeli hangisidir. Bu model, EF (ilk veritabanı) tarafından üretilebilir veya mevcut bir sınıf modeli olabilir (önce kod). Kavramsal model ve mağaza modeli eşlemesiyle bağlantılıdır, bu yüzden EF veritabanlarının nasıl kaydedileceğini bilir. Net sınıflar veritabanı kayıtlarından ve tersine nasıl kaydedilir. Net sınıfları veritabanına.
  • Bazı kişiler, kavramsal modeldeki sınıflara "modeller" olarak başvurur. Bu yanlış değil, bunun için entities adını kullanmayı tercih ediyorum.

Yani bağlam ve modeli iki oldukça farklı şeylerdir. Bağlamın iki farklı model türü arasındaki aracı olduğunu söyleyebilirsin.

+0

Yanıtınızdan # 2 numaralı kurşun noktasını göz önüne alırsak, herhangi birinin modellerden daha fazla dbContexts'a sahip olmasının nedeni nedir ve tam tersi nedir? Kullanılan içeriklerin model sayısına (edmx'ler) geldiğinde en iyi uygulama var mı? – user1431072

+1

@ user1431072 Her birinin veritabanının farklı bölümlerini temsil eden ayrı bağlamlara sahip olmasının gerekçeleri olabilir. Örneğin, yetkilendirme için ayrı tablolar varsa, bir yetkilendirme içeriğine (ilgili yetkilendirme sınıfı modeliyle) ve bir iş içeriğine sahip olabilirsiniz. İçerikten daha fazla (mağaza) model mümkün değildir: bir içerik bir veritabanına erişir. –

+0

@GertArnold: +1. Aşağıdakiler hakkındaki düşünceleriniz nelerdir: Varolan bir DB'den Kod İlk sınıfları oluşturmak için "ADO.NET Varlık Veri Modeli" şablonunu kullandığımda, Visual Studio başlangıçta 'Model1' öğesinin adını önerir. Bunu 'FooModel' olarak değiştirdim. VS daha sonra bir "sınıf FooModel: DbContext" üretecektir. Benim için bu kalıtsal ilişki, “model” ve “bağlam” hakkındaki karışıklığın nereden kaynaklandığıdır. VS 'FooModel' olarak adlandırılan bir şey üretirse, bunun yerine bir ad alanı veya alt klasör olması gerekmez mi? Foo 'modelinin bağlam sınıfı' FooContext' olarak adlandırılmamalıdır? – stakx

3

gevşek bir şekilde bir model veri erişimi nesne sınıflarına vb tabloları, görünümleri, (diğer bir deyişle, veri içerecektir nesneler)

0

bir model arasındaki eşleme aşağıdaki anlamlara bir bağlam bir veri tabanı bağlantısı ya da oturum ilişkindir konuşma Bir veritabanı tablosunu görüntülemek için genellikle bir veritabanı tablosunu veya yapısını temsil eden sınıf. Arabalar için bir veritabanı olsaydı Örneğin, daha sonra araba için bir model

public class Car 
{ 
[Key] 
public int CarId { get; set; } 
public string Make { get; set; } 
public string Model { get; set; } 
public int Year { get; set; } 
} 

Bu model veritabanında bir sorgu oluşturmak için varlık çerçevesi ve (mysql veya genellikle mssql için) sql sağlayıcısı tarafından kullanılan olabilir . Sorgu, bunun eşlenmesi için bir yol gerektirir ve bu bağlamın görevidir. Bağlam genellikle DbContext'u genişletir ve veritabanı tablasına bir bellek nesnesi olarak erişmenin cephesi için kullanılır.

public class CarContext : DbContext 
{ 
DbSet<Car> Cars { get; set; } 
} 
İlgili konular