表定义
型号定义
码
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部分,并根据当前的数据库结构创建新的部分。