LINQ TO SQL наследование с типизированными таблицами в DataContext - PullRequest
0 голосов
/ 29 марта 2011

Эй, ребята, у меня была рабочая система LINQ2SQL с типизированными таблицами, но теперь, когда я попытался добавить отображение наследования между двумя классами, я получаю сообщение об ошибке при создании экземпляра DataContext.Ошибка - «строка ввода в неправильном формате».Я предполагаю, что есть некоторый конфликт с тем, что я ввел Tables в моем классе Datacontext, и сопоставление, которое я создал.

Вот сокращенная версия моего кода

public class DataAccessHelper : DataContext
{
    public static DataContext db;
    public Table<CronJob> CronJob;
    public Table<SongCronJob> SongCronJob;

    public DataAccessHelper(string connection) : base(connection) { }

}

[Table(Name = "cron_jobs", )]
[InheritanceMapping(Code = "CJ", Type = typeof(CronJob))]
[InheritanceMapping(Code = "SCJ", Type = typeof(SongCronJob))]
public class CronJob //Instantiated by any cron job run
{
    //IsDiscriminator = true, 
    [Column(IsPrimaryKey = true, IsDiscriminator = true, Name = "id", IsDbGenerated = true, CanBeNull = false)]
    public int ID { get; set; }
}

[Table(Name = "cron_jobs_songs")]
public class SongCronJob : CronJob
{
}

Я должентакже скажем, что у классов CronJobs есть несколько сопоставленных свойств (которые на самом деле существуют только в таблице SQL подкласса, я предполагаю, что это нормально. (IE, я хочу объявить эти свойства только в суперклассе 1, так как все дочерние задания cron будут использовать их совместно)(И я никогда не буду создавать экземпляр суперкласса)

Код, который теперь выдает ошибку:

DataAccessHelper db = new DataAccessHelper(ConfigurationManager.ConnectionStrings["DataDB"].ConnectionString);

Трассировка стека:

FormatException: Input string was not in a correct format.

System.Number.StringToNumber(String str, параметры NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логическое значение parseDecimal) +9594283 System.Number.ParseInt32 (String s, стиль NumberStyles, информация NumberFormatInfo) +119 поставщик System.String.System.IConvertible.ToInt32 (IFormatP) + поставщикSystem.Convert.ChangeType (значение объекта, тип преобразования типа, поставщик IFormatProvider) +385 System.Data.Linq.DBConvert.ChangeType (значение объекта, тип типа) +3236 System.Data.Linq.Mapping.AttributedRootType..ctor (модель AttributedMetaModel, таблица AttributedMetaTable, тип типа) +408 System.Data.Linq.Mapping.AttributedMetaTable..M model (AttributedMetaTable..M model)Атрибут TableAttribute, тип rowType) +97 System.Data.Linq.Mapping.AttributedMetaModel.GetTableNoLocks (тип rowType) +216 System.Data.Linq.Mapping.AttributedMetaModel.GetTable (Тип rowType) +18q System.Data.GetTable (тип Type) +51 System.Data.Linq.DataContext.InitTables (схема объекта) +180 System.Data.Linq.DataContext.Init (подключение объекта, сопоставление MappingSource) +269 System.Data.Linq.DataContext..ctor(Строка fileOrServerOrConnection) +44 Helper.Data.DataAccessHelper..ctor (Строковое соединение) в C: \ Users \ william \ Desktop \ Stuff \ Важные заметки \ Subversion Dev \ Projects \ CodenameDiddy \ helper \ Data \ DataHelper.cs: 20 CodenameDiddy.masterpages.Cronxxx.Page_Load (Отправитель объекта, EventArgs e) в C: \ Users \ william \ Desktop \ Stuff \ Важные заметки \ Subversion Dev \ Projects \ CodenameDiddy \ http \ masterpages \ Cronxxx.master.cs: 32 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Объект o, Объект t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Обратный вызов (отправитель объекта, EventArgs e) +35 System.Web.UI.Control.OnLoad (EventArgs e) +91 System.Web.UI.Control.LoadRecursive () +74 System.Web.UI.Control.LoadRecursive () +146 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 2207

1 Ответ

0 голосов
/ 29 марта 2011

Я думаю, что это связано с несоответствием типов между кодом InheritanceMapping и идентификатором столбца дискриминатора, один - строка, а другой - int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...