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日的日期?
答案 0 :(得分:1)
查看图片模型定义。未指定默认值。您的数据库实体不知道默认值。因此,它使用CreationDate的当前值。尝试将模型定义的默认值设置为合理的值。
答案 1 :(得分:1)
如果在设计器中设置StoreGeneratedPattern="Computed"
,它仅包含在概念模型(CSDL)中。但是你也需要在存储模型(SSDL)中使用它。如果不这样做,EF将生成INSERT语句,该语句将包含日期的当前值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部分,并根据当前的数据库结构创建了新的部分。