【发布时间】:2015-07-27 11:31:48
【问题描述】:
我正在尝试将 Entity Framework 6.1.3 与 Oracle 12c 数据库服务器一起使用。我已被警告。但我还没有准备好告诉客户这是不可能的。我已经设置了一些技巧。现在我需要另一个。生成的列名很容易超过 30 个字符,但 Oracle 仍然无法处理这些。所以我以为我只是将ColumnAttribute 用于这些属性,但它只是被导航属性忽略了。
这里有一些示例代码:
public class Component
{
public int ComponentId { get; set; }
[Column("ParentIF")]
public virtual Interface ParentInterface { get; set; }
}
public class Interface
{
public int InterfaceId { get; set; }
}
生成的名称将是“ParentInterface_InterfaceId”。我想将其更改为更短的“ParentIF”。上面的代码不起作用,它仍然使用较长的名称。
我在其他地方找到的一些代码使用了这样的东西:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Fix reference column names to support Oracle's 30 characters restriction.
// Entity Framework ignores Column attribute on reference columns.
modelBuilder.Entity<Component>()
.Map(m => m.MapKey("ParentIF"));
base.OnModelCreating(modelBuilder);
}
但这是不完整的。它缺少应该像这样映射哪一列的规范。我找不到丢失的部分。而且它不会编译。
另一个想法是使用类似以下的东西:
modelBuilder.Entity<Component>()
.Property(c => c.ParentInterface)
.HasColumnName("ParentIF");
这给了我一个我不理解的编译器错误 CS0453。
有没有办法明确定义实体框架代码优先中的引用属性必须使用什么列名?
【问题讨论】:
标签: c# .net oracle entity-framework