見http://msdn.microsoft.com/en-us/data/jj591620 EF關係
的優秀圖書 http://my.safaribooksonline.com/book/-/9781449317867
下面是從開發商後,從2010年十二月但仍相關 http://social.msdn.microsoft.com/Forums/uk/adonetefx/thread/aed3b3f5-c150-4131-a686-1bf547a68804 以上文章是一個很好的總結或這裏的可能的組合。
一個解決方案,其中依賴表具有來自主表的鍵是可能的。
如果你想在PK/FK場景中兩個都是校長的獨立密鑰,我不認爲你可以在代碼中先用Fluent API來完成。如果他們共享密鑰,那麼你沒問題。 1:1可選假定相關方使用Primary中的密鑰。
但是因爲您需要將其中一個表保存在另一個之前。您可以使用代碼檢查其中一個外鍵。或者在代碼第一次創建它之後,將第二個Foreign添加到數據庫。
你會接近。但是如果你想要外鍵的話,EF會抱怨衝突的外鍵。基本上,A取決於B取決於EF不喜歡,即使列在數據庫中可以爲空並且技術上可行。
這裏使用這個測試程序來試試它。只需評論一下Fluent API的東西來嘗試一些選擇。 我無法讓EF5.0與獨立PK/FK一起工作0:1至0:1 但是,當然如所討論的那樣存在合理的折衷。
using System.Data.Entity;
using System.Linq;
namespace EF_DEMO
{
class Program
{
static void Main(string[] args) {
var ctx = new DemoContext();
var ord = ctx.Orders.FirstOrDefault();
//. DB should be there now...
}
}
public class Order
{
public int Id {get;set;}
public string Code {get;set;}
public int? QuotationId { get; set; } //optional since it is nullable
public virtual Quotation Quotation { get; set; }
//....
}
public class Quotation
{
public int Id {get;set;}
public string Code{get;set;}
// public int? OrderId { get; set; } //optional since it is nullable
public virtual Order Order { get; set; }
//...
}
public class DemoContext : DbContext
{
static DemoContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DemoContext>());
}
public DemoContext()
: base("Name=Demo") { }
public DbSet<Order> Orders { get; set; }
public DbSet<Quotation> Quotations { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>().HasKey(t => t.Id)
.HasOptional(t => t.Quotation)
.WithOptionalPrincipal(d => d.Order)
.Map(t => t.MapKey("OrderId")); // declaring here via MAP means NOT declared in POCO
modelBuilder.Entity<Quotation>().HasKey(t => t.Id)
.HasOptional(q => q.Order)
// .WithOptionalPrincipal(p => p.Quotation) //as both Principals
// .WithOptionalDependent(p => p.Quotation) // as the dependent
// .Map(t => t.MapKey("QuotationId")); done in POCO.
;
}
}
}
'公共虛擬報價報價{獲得;組; '',不是?你爲什麼不使用屬性?爲什麼你所有的領域都是私人的 –
對不起,我編輯了屬性的代碼。我的課不是虛擬的。 – Masoud
它不是虛擬類,它是Order類中的虛擬導航屬性。 –