1

我有两张表格植物和信息。每个植物都有很多信息,但每个植物只有一个 MainInformation。所以两者之间存在一对多的关系和一对一的关系。Information 表有一个 PlantID,Plants 表有一个 MainInformationID。我希望两个表中的两个字段都不是空值。但是现在您不能将两条记录中的任何一条插入到他们的表中,因为每条记录都要求他们的字段不为空,这意味着他们需要先创建另一条记录才能创建自己。也许这不是一个好的数据库设计,应该改变什么?(我是数据库和实体框架的新手)

我尝试手动插入数据库本身,但我做不到。我还用 EntityFramework 尝试了这段代码。

using (var context = new MyEntities())
        {
            var p = new Plant()
            {
                LatinName = "latinNameTest",
                LocalName = "localNameTest",
                CycleTime = 500
            };

            var i = new Information()
            {
                ShortDescription = "ShortDesc",
                LongDescription = "LongDesc"
            };

            p.MainInformation = i;
            i.Plant = p;

            context.AddToPlants(p);
            context.AddToInformation(i);

            context.SaveChanges();                
        }
4

3 回答 3

2

您需要更改表以允许为空。没有其他方法可以做到这一点。

于 2010-03-07T12:49:27.893 回答
2

之一

  • 1-1 FK 列必须为 NULL
  • 必须禁用 FK 才能允许父级在子级之前插入
  • 您有一个虚拟信息行,默认情况下在 FL 列中使用

SQL Server 不允许在没有“代码更改”权限的情况下进行延迟约束检查,因此即使包装在事务中也不起作用

听起来像 EAV 架构,但还有其他问题

于 2010-03-07T16:26:21.557 回答
0

您可能想查看数据库事务以及如何将它们与实体框架一起使用。您可以将两个 INSERTS 包装到单个数据库事务中,因此唯一的结果是它们都进入或都不进入。

是使用 EF 进行交易的链接。我没有通读它,但它似乎足以让你开始谈论它们。

于 2010-03-07T13:06:18.603 回答