Мы переместили файл .dbml с веб-сайта в другую сборку, чтобы его можно было использовать в нескольких приложениях. Проблема в том, что теперь я получаю ошибку, которая не имеет никакого смысла.
Основной запрос выглядит так:
from D in Devices
select new
{
EquipmentTypeID = D.DMXDeviceModel.DMXDeviceClass.DMXEquipmentType.ID,
//... more fields
}
Есть несколько полей, запрошенных подобным образом, и теперь все они выдают следующее исключение: Нулевое значение не может быть присвоено элементу с типом System.Int32, который является необнуляемым типом значения.
Указанные поля идентификаторов не могут быть обнулены в базе данных или в классе сущностей Linq. Все совпадает правильно, поэтому нигде не должно быть нулевого значения. Код также отлично работал до «перемещения» файла .dbml в другую сборку.
На самом деле, мы не перемещали это, потому что были некоторые другие ошибки и проблемы, когда мы пытались. Я воссоздал его в новой сборке, но это не должно иметь значения, потому что он был сгенерирован из той же базы данных.
Я также пытался выбрать что-нибудь, где D.DMXDeviceModel.DMXDeviceClass.DMXEquipmentType.ID имеет значение NULL, и результаты не были возвращены.
РЕДАКТИРОВАТЬ: по запросу здесь xml для файла dbml. Или хотя бы соответствующие порции:
<Table Name="dbo.DMXDevice" Member="DMXDevices">
<Type Name="DMXDevice">
<Column Name="ID" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
<Column Name="DeviceModelID" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Association Name="DMXDeviceModel_DMXDevice" Member="DMXDeviceModel" ThisKey="DeviceModelID" OtherKey="ID" Type="DMXDeviceModel" IsForeignKey="true" />
</Type>
</Table>
<Table Name="dbo.DMXDeviceModel" Member="DMXDeviceModels">
<Type Name="DMXDeviceModel">
<Column Name="ID" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
<Column Name="DeviceClassID" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
<Column Name="Model" Type="System.String" DbType="NVarChar(255) NOT NULL" CanBeNull="false" />
</Type>
</Table>
Оказывается, все, на что ссылается DMXDeviceModel, выдает это исключение, когда DeviceModelID имеет значение null. Кажется, это проблема при создании анонимного типа для обработки нулевого DeviceModelID ... но почему этого не происходило раньше?
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Вы знаете, я также перешел на .NET 3.5 SP1, и это изменило некоторые другие поведения на сайте. Может быть, это настоящий виновник здесь.