我有以下模型 - 第一個(它叫做什麼?)我已經制作的圖。我使用T4
來生成類。實體框架問題 - 爲我的表名添加「1」?
現在,我已經導致實體框架以某種方式追加了「1」到DatabaseSupporter
實體的表名的問題。數據庫是從這個模型生成的,沒有任何修改。
我試圖執行以下行:
_entities.DatabaseSupporters.SingleOrDefault(s => s.Id == myId);
執行該線(具有低於其內部異常一起)時,收到的錯誤是:
類型的異常' System.Data.Entity.Core.EntityCommandExecutionException'發生在 mscorlib.dll中,但未在用戶代碼中處理。
無效的對象名稱'dbo.DatabaseSupporter1'。
我試着用下面的Fluent API代碼解決了這個問題(注意函數中的第二行顯式地給「DatabaseSupporter」命名錶),但沒有運氣。
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder
.Entity<DatabaseSupporter>()
.HasOptional(f => f.DatabaseChatSession)
.WithOptionalPrincipal(s => s.DatabaseSupporter);
modelBuilder
.Entity<DatabaseSupporter>()
.Map(m =>
{
m.Property(s => s.Id)
.HasColumnName("Id");
m.ToTable("DatabaseSupporter");
});
modelBuilder
.Entity<DatabaseSupporter>()
.HasMany(s => s.DatabaseGroups)
.WithMany(g => g.DatabaseSupporters)
.Map(m =>
{
m.ToTable("DatabaseSupporterDatabaseGroup");
m.MapLeftKey("DatabaseGroups_Id");
m.MapRightKey("DatabaseSupporters_Id");
});
modelBuilder
.Entity<DatabaseGroup>()
.HasRequired(g => g.DatabaseChatProgram)
.WithMany(c => c.DatabaseGroups);
modelBuilder
.Entity<DatabaseGroup>()
.HasRequired(g => g.DatabaseOwner)
.WithMany(o => o.DatabaseGroups);
modelBuilder
.Entity<DatabaseOwner>()
.HasMany(o => o.DatabaseChatSessions)
.WithRequired(o => o.DatabaseOwner);
base.OnModelCreating(modelBuilder);
}
應當提及的是,Id
屬性每個實體實際上是一個Guid
。
我正在使用Entity Framework 6.0.2。
任何想法?
編輯1 下面是一個包含我的DatabaseSupporter
實體在意見中的要求生成的DatabaseSupporter.cs
文件。
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Coengage.Data.Entities
{
using System;
using System.Collections.Generic;
public partial class DatabaseSupporter
{
public DatabaseSupporter()
{
this.DatabaseGroups = new HashSet<DatabaseGroup>();
}
public bool IsActive { get; set; }
public string Username { get; set; }
public System.Guid Id { get; set; }
public virtual DatabaseChatSession DatabaseChatSession { get; set; }
public virtual ICollection<DatabaseGroup> DatabaseGroups { get; set; }
}
}
編輯2 的錯誤開始發生的歷史後,我加入DatabaseSupporter
和DatabaseGroup
之間的許多一對多鏈接。在該鏈接之前,Fluent代碼也不需要。
我之前沒有使用'T4'來生成任何類,因爲我創建了所有的類,然後讓實體框架創建數據庫(代碼優先)。你可以發佈你的'POCO'類還是'T4'後面的方法?嘗試使用流利的API來更改表名稱將不會像其錯誤的類那樣工作。 – Heberda
我正在使用默認的T4模板。實體框架爲我生成類,但它使用T4。關鍵是雖然T4模板沒有被修改過。 –
它創建了一個可以查看/發佈的POCO類嗎? – Heberda