C# Silverlight RIA EF6代码第一个SQL脚本生成未知的鉴别器字段
此场景发生在复杂的Silverlight RIA LOB应用程序中 我们正在从升级应用程序C# Silverlight RIA EF6代码第一个SQL脚本生成未知的鉴别器字段,c#,sql-server,entity-framework,silverlight,ria,C#,Sql Server,Entity Framework,Silverlight,Ria,此场景发生在复杂的Silverlight RIA LOB应用程序中 我们正在从升级应用程序 EntityFramework 4 ==> EntityFramework 6 Silverlight RIA ==> Open RIA Silverlight 4 ==> Silverlight 5 EF Database First ==> EF Code First 我们有一个代码优先的EF6上下文类,如下所示 public DbContext() : base(
EntityFramework 4 ==> EntityFramework 6
Silverlight RIA ==> Open RIA
Silverlight 4 ==> Silverlight 5
EF Database First ==> EF Code First
我们有一个代码优先的EF6上下文类,如下所示
public DbContext()
: base("DefaultConnection")
{
...
public DbSet<Parameter> Parameters{ get; set; }
public DbSet<ParameterType> ParameterTypes { get; set; }
}
[Table("Parameters")]
public partial class Parameter
{
[Key]
public int ParameterId {get;set;}
[InverseProperty("ParameterType")]
public int ParameterTypeId {get;set;}
[ForeignKey("ParameterTypeId")]
public virtual ParameterType ParameterType { get; set; }
public int? StoreId {get;set;}
...
}
[Table("ParameterTypes")]
public partial class ParameterType
{
[Key]
public global::System.Int32 ParameterTypeId {get;set;}
public global::System.String ParameterName {get;set;}
...
}
例外情况是:
“列名称“鉴别器”无效。”
没有一个表字段的名称为“鉴别器”
当我查看生成的SQL查询时,它显示
{SELECT
CASE WHEN ([Extent1].[Discriminator] = N'Parameter') THEN '0X' WHEN ([Extent1].[Discriminator] = N'ImportParameters') THEN '0X0X' WHEN ([Extent1].[Discriminator] = N'RecalcParameters') THEN '0X0X0X' WHEN ([Extent1].[Discriminator] = N'RolloverParameters') THEN '0X0X1X' WHEN ([Extent1].[Discriminator] = N'MassChangeParameters') THEN '0X1X' ELSE '0X2X' END AS [C1],
[Extent1].[ParameterId] AS [ParameterId],
[Extent1].[ParameterTypeId] AS [ParameterTypeId],
[Extent1].[StoreId] AS [StoreId],
[Extent1].[FiscalYear] AS [FiscalYear],
[Extent1].[ParameterEffectiveDate] AS [ParameterEffectiveDate],
[Extent1].[ParameterValue] AS [ParameterValue],
[Extent1].[UpdatedOn] AS [UpdatedOn],
[Extent1].[UpdatedBy] AS [UpdatedBy],
CASE WHEN ([Extent1].[Discriminator] = N'Parameter') THEN CAST(NULL AS varchar(1)) WHEN ([Extent1].[Discriminator] = N'ImportParameters') THEN [Extent1].[Prompt] WHEN ([Extent1].[Discriminator] = N'RecalcParameters') THEN [Extent1].[Prompt] WHEN ([Extent1].[Discriminator] = N'RolloverParameters') THEN [Extent1].[Prompt] WHEN ([Extent1].[Discriminator] = N'MassChangeParameters') THEN CAST(NULL AS varchar(1)) END AS [C2],
...
我不知道鉴别器来自何处,但另一方面,为什么它会根据字符串(如N'RecalcParameters'
N'RolloverParameters'
等)对其进行检查
经过进一步调查,我意识到我的参数类
有另一个部分声明,如
[KnownType(typeof(ImportParameters))]
[KnownType(typeof(RolloverParameters))]
[KnownType(typeof(RecalcParameters))]
[KnownType(typeof(MassChangeParameters))]
[KnownType(typeof(ReforecastParameters))]
public partial class Parameter
{
...
}
它有助于解决Silverlight客户端上的复杂实体继承问题。
我的猜测是,“KnownType”属性会以某种方式影响SQL Server脚本生成器。
我在互联网上到处搜索,找不到任何能帮助我解决这个问题的线索 使用以下命令:
public class DbContext: DbContext
{
public DbContext()
{
Configuration.ProxyCreationEnabled = false;
}
}
我以前试过这个,又试了一次。没什么区别。还在生成那个奇怪的SQL脚本吗
public class DbContext: DbContext
{
public DbContext()
{
Configuration.ProxyCreationEnabled = false;
}
}