私はここで多くの質問を検索しましたが、それは私のものと似ていましたが、私の問題に一致するものはありませんでした.
私は EF Code First を使用し、それを既存の (レガシー) MySQL データベースにマップしようとしています。1 つを除いて私のプロパティで正常に動作しますが、その理由がわかりません..
null のモデル:
[Table("einheitenstamm")]
public class Unit : ClassicEntity
{
[Key]
[Column("estID")]
public int Id { get; set; }
[Column("estEinheit")]
public string Name { get; set; }
}
Unit への参照を含むモデル:
[Table("artikeldaten_preise")]
public class ArticlePrice : ClassicEntity
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("einheit")]
[ForeignKey("Id")]
public virtual Unit Unit { get; set; } /* is always null!!!!! */
[Column("preisliste")]
[ForeignKey("Id")]
public virtual Pricelist Pricelist { get; set; } /* gets loaded without problems */
[Column("artikel")]
[ForeignKey("Id")]
public virtual Article Article { get; set; } /* gets loaded without problems */
[Column("preis")]
public double Price { get; set; }
}
データベース テーブルの作成:
CREATE TABLE `artikeldaten_preise` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`preisliste` INT(11) NOT NULL,
`artikel` VARCHAR(10) NOT NULL,
`preis` DECIMAL(10,2) NOT NULL,
`einheit` INT(11) NOT NULL,
`changed` DATETIME NULL DEFAULT NULL,
`sys_deleted` BIT(1) NOT NULL DEFAULT b'0',
`sys_changedfrom` VARCHAR(50) NULL DEFAULT NULL,
`sys_changedat` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `artikel` (`artikel`) USING BTREE,
INDEX `preisliste` (`preisliste`) USING BTREE,
INDEX `einheit` (`einheit`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2;
コード:
var units = from unit in context.Units
where unit.Id == 4
select unit;
foreach (var unit in units)
Console.WriteLine(unit.Id + ": " + unit.Name); /* works */
var prices = from price in context.ArticlePrices
select price;
foreach (var price in prices.ToList()) /* price.Unit = NULL ........... */
MessageBox.Show(price.Article.Description + " " + price.Price + "/"
+ price.Unit.Name + " in pricelist '"
+ price.Pricelist.Name + "'");
誰が私が間違っているのか教えてもらえますか?