表定义



型号定义





using MyRandomizer.Models;

namespace MyRandomizer
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Database1Entities db = new Database1Entities())
            {

                Category c = new Category();
                c.Name = "Integral";

                db.Categories.AddObject(c);
                db.SaveChanges();

            }
        }
    }
}


输出量





为什么默认值列会自动填充为0001年1月1日?

最佳答案

如果在设计器中设置StoreGeneratedPattern="Computed",则仅包含在概念模型(CSDL)中。但是您在存储模型(SSDL)中也需要此功能。如果不这样做,EF将生成INSERT语句,该语句将包含date的当前值DataTime.MinValue。不能从设计器中编辑存储模型。您必须以XML格式打开EDMX文件并手动更新行定义。

最终定义应如下所示:

<edmx:Edmx ...>
  <edmx:Runtime>
    <edmx:StorageModels>
      <Schema ...>
        <EntityContainer Name="...">
          <EntitySet Name="Categories" EntityType="...Categories" store:Type="Tables" Schema="dbo" />
          ...
        </EntityContainer>
        <EntityType Name="Categories"/>
          ...
          <!-- Here you must add StoreGeneratedPattern -->
          <Property Name="CreationDate" Type="datetime" Nullable="false" StoreGeneratedPattern="Computed" />
        </EntityType>
      </Schema>
    </edmx:StorageModels>
    ...
  </edmx:Runtime>
</edmx:Edmx>


但是这种解决方案有一个大问题。手动修改SSDL零件后,您不应使用“从数据库更新”,否则您将不得不在每次调用“从数据库更新”之后执行此更改。原因是“从数据库更新”会删除EDMX的当前SSDL部分,并根据当前的数据库结构创建新的部分。

08-18 22:00