我通常在纯SQL中定义我的数据库(大部分时间在VS数据库项目中),如果我需要在.NET项目中使用它们,我reverse engineer使用实体框架。
但是如果从现有数据库生成实体和上下文,通常会得到一堆代码,这些代码只是配置我不希望由EF处理的事情,比如Indices。
Entity Framework是否真的需要所有代码才能正常运行?或者只是有人想要使用EF的迁移或其他东西?没有问题的工作所需的最低配置是什么?
一些代码似乎对我来说是不必要的(所有对于EF Core都是如此):
约束和删除行为
entity.HasOne(d => d.Order)
.WithMany(p => p.OrderPosition)
.HasForeignKey(d => d.OrderId)
.OnDelete(DeleteBehavior.ClientSetNull) // ?
.HasConstraintName("FK_ORDER_ORDERPOSITION"); // ?
默认值和列类型
entity.Property(e => e.CreatedOn)
.HasColumnType("datetime") // ?
.HasDefaultValueSql("(getdate())"); // ?
entity.Property(e => e.Price)
.HasColumnType("decimal(10, 2)"); // ?
指数
entity.HasIndex(e => new { e.ProjectId, e.OrderId }) // ?
.HasName("UNIQUE_PROJECT_ORDER") // ?
.IsUnique(); // ?
的MaxLength
entity.Property(e => e.Application)
.IsRequired()
.HasMaxLength(60); // ?
价值生成
entity.Property(e => e.Sequence)
.ValueGeneratedOnAdd(); // ?
entity.Property(e => e.GUID)
.ValueGeneratedNever(); // ?
答案 0 :(得分:2)
大部分内容既可以使用,也可以使用。 EF可以在没有这一切的情况下工作,但是你可能会遇到问题或限制。
EF需要ColumnTypes和length来正确绑定参数。 EF需要知道密钥生成策略以获取生成的密钥值。 EF需要了解导航属性和外键属性之间的关系。
我认为EF不会对关系的级联行为做任何事情,但它可能会,或者可能在未来。
EF并不关心索引,但将来可能会注意到唯一索引。 EF Core需要了解外键关系中涉及的所有密钥。
答案 1 :(得分:0)
以下当前未被运行时使用(在迁移之外),并且可以从脚手架代码中安全地删除: