将ASP.NET实体数据用于复杂关系

时间:2012-06-23 10:05:44

标签: c# asp.net database entity-framework

我的数据库中存在复杂的关系。

Packages (packageID, package_name , .... )
VariantPackage (packageID, variantID)
Variant (variantID, variant_name, .... )
ProductVariant (variantID, productID)
Product (productID, product_name, .... )

(我认为你可以假设ID字段分别是Primary或​​Foreign?)

实体框架优雅地抓住了这个,因为如果这样做:

Package newPackage = new Package()
{
 packageID = Guid.NewGuid()
 etc . . .
};

Variant newVariant = new Variant()
{
 variantID = Guid.NewGuid()
 etc . . .
};

我在下面的这一行中获得了将该变体添加到该包

的选项
newPackage.Variant.AddObject(newVariant);
_db.Package.AddObject(newPackage);
_db.SaveChanges();

现在当我在这两行中保存更改时,在所有3个表中创建条目?如果我正确设置了模型?

由于

2 个答案:

答案 0 :(得分:0)

每个表都应该有一个insert方法(为表调用addobject)。并安排表格相关的插入方法的调用非常重要。 使用此代码将Variant插入DB:

public void InsertVariant(Variant entry)
{
            var t = _db.Variant.CreateObject();
            t.variant_name = entry.variant_name;
// and copy all field ...
// then
            _db.Variant.AddObject(t);
            _db.SaveChanges();
}

答案 1 :(得分:0)

我现在使用Code First Entity Framework:

public abstract class DbEntity
{
    [Key, DatabaseGenerated(DatabaseGenerated.Identity)]
    [HiddenInput(DisplayValue = false)]
    public Guid Id { get; set; }
}

public class Package : DbEntity
{
    public string Name { get; set; }
    public List<Variant> Variants { get; set; }
}

public class Variant : DbEntity
{
    public string Name { get; set; }
    public List<Product> Products { get; set; }
}

public class Product : DbEntity
{
    public string Name { get; set; }
}

然后,当创建它时,它应该创建适当的表和约束。