Entity framework 4 仅CTP5 POCO代码,如何将主详细记录添加到数据库

Entity framework 4 仅CTP5 POCO代码,如何将主详细记录添加到数据库,entity-framework-4,poco,code-first,entity-framework-ctp5,Entity Framework 4,Poco,Code First,Entity Framework Ctp5,我正在尝试EF CTP5 POCO,并将EF4 EntityModel转换为仅POCO代码的方法 internal class InvoiceContext : DbContext { public DbSet<Invoice> Invoices {get; set;} public DbSet<InvoiceLine> InvoiceLines {get; set;} } public class Invoice { public Guid I

我正在尝试EF CTP5 POCO,并将EF4 EntityModel转换为仅POCO代码的方法

internal class InvoiceContext : DbContext
{
    public DbSet<Invoice> Invoices {get; set;}
    public DbSet<InvoiceLine> InvoiceLines {get; set;}
}

public class Invoice
{
    public Guid InvoiceId { get; set; }
    public virtual ICollection<InvoiceLine> Lines { get; set; }
}

public class InvoiceLine
{
    public Guid InvoiceLineId { get; set; }
    public Guid InvoiceId { get; set; }
    public virtual Invoice Header { get; set; }
}

库存线这里有一种方法:

using (var db = new Ctp5Context())
{
    var inv = new Invoice() 
    { 
        InvoiceId = Guid.NewGuid() 
    };
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid(),
        Header = inv
    };

    db.InvoiceLines.Add(invLine);
    db.SaveChanges();      
}
如果希望添加发票对象,则:

using (var db = new Ctp5Context())
{
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid()          
    };
    var inv = new Invoice()
    {
        InvoiceId = Guid.NewGuid(),
        Lines = new List<InvoiceLine>() { invLine}
    };

    db.Invoices.Add(inv);
    db.SaveChanges();      
}
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{ 
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
行=新列表(){invLine}
};
db.发票。添加(库存);
db.SaveChanges();
}
虽然所有这些都有效,但我建议始终在类构造函数中初始化navigation属性集合,这样您就不必每次都在客户端代码中进行初始化,也不会在运行时遇到NullReferenceException:

public class Invoice
{
    public Invoice()
    {
        Lines = new List<InvoiceLine>();
    }
    public Guid InvoiceId { get; set; }
    public virtual ICollection<InvoiceLine> Lines { get; set; }
}

...

using (var db = new Ctp5Context())
{
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid()          
    };
    var inv = new Invoice()
    {
        InvoiceId = Guid.NewGuid(),         
    };
    inv.Lines.Add(invLine);

    db.Invoices.Add(inv);
    db.SaveChanges();      
}
公共类发票
{
公共发票()
{
行=新列表();
}
公共Guid发票ID{get;set;}
公共虚拟ICollection行{get;set;}
}
...
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{ 
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
};
存货行添加(存货行);
db.发票。添加(库存);
db.SaveChanges();
}

以下是一种方法:

using (var db = new Ctp5Context())
{
    var inv = new Invoice() 
    { 
        InvoiceId = Guid.NewGuid() 
    };
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid(),
        Header = inv
    };

    db.InvoiceLines.Add(invLine);
    db.SaveChanges();      
}
如果希望添加发票对象,则:

using (var db = new Ctp5Context())
{
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid()          
    };
    var inv = new Invoice()
    {
        InvoiceId = Guid.NewGuid(),
        Lines = new List<InvoiceLine>() { invLine}
    };

    db.Invoices.Add(inv);
    db.SaveChanges();      
}
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{ 
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
行=新列表(){invLine}
};
db.发票。添加(库存);
db.SaveChanges();
}
虽然所有这些都有效,但我建议始终在类构造函数中初始化navigation属性集合,这样您就不必每次都在客户端代码中进行初始化,也不会在运行时遇到NullReferenceException:

public class Invoice
{
    public Invoice()
    {
        Lines = new List<InvoiceLine>();
    }
    public Guid InvoiceId { get; set; }
    public virtual ICollection<InvoiceLine> Lines { get; set; }
}

...

using (var db = new Ctp5Context())
{
    var invLine = new InvoiceLine() 
    { 
        InvoiceLineId = Guid.NewGuid()          
    };
    var inv = new Invoice()
    {
        InvoiceId = Guid.NewGuid(),         
    };
    inv.Lines.Add(invLine);

    db.Invoices.Add(inv);
    db.SaveChanges();      
}
公共类发票
{
公共发票()
{
行=新列表();
}
公共Guid发票ID{get;set;}
公共虚拟ICollection行{get;set;}
}
...
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{ 
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
};
存货行添加(存货行);
db.发票。添加(库存);
db.SaveChanges();
}

我知道我可以做到这一点,但我尝试使用它的方式又如何呢?这是用CTP5和POCO代码处理这种情况的方法吗?谢谢你的帮助,我会尝试传递列表,看看它是否有效。好的,创建列表并添加项目会将子记录保存到数据库中。我知道我可以做到这一点,但我尝试使用它的方式如何,是不是不可能?这是使用CTP5和POCO纯代码方法处理此类场景的方法。我将尝试传递列表,看看它是否有效,谢谢您的帮助。好的,创建列表并添加项将子记录保存到db。