Мне известно, что реалистичным вариантом является изменение предложенной схемы БД;Я тоже преследую этот вариант.Однако ... Я хотел бы знать, возможно ли настроить EF так, чтобы он понимал эту структуру ....
Бизнес-модель:
- Every Fooассоциируется с баром.
- Каждый бар может иметь несколько Foos.
- Каждый бар может также иметь один специальный Foo (хотя он может не иметь его)
Обеспечение согласованности «особого Foo бара должен быть связан с этим баром» является обязанностью кодовой базы, а не базы данных.
Обеспечение согласованности «бара не может быть болееза одну специальную Foo "в идеале будет отвечать база данных.
Выбранная модель БД:
Как отмечалось выше, я знаю, что существуют и другие возможные структуры с множеством преимуществдля них (не в последнюю очередь «быть проще в настройке в EF»).
CREATE TABLE [dbo].[Foo] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[BarId] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Bar] FOREIGN KEY ([BarId]) REFERENCES [dbo].[Bar] ([Id])
);
CREATE TABLE [dbo].[Bar] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[SpecialFooId] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_SpecialFoo] FOREIGN KEY ([SpecialFooId]) REFERENCES [dbo].[Foo] ([Id])
);
Текущая догадка в доменной модели:
public class Foo
{
public int Id { get; set; }
// Props for easy 1-many relationship.
public int BarId { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
// Prop for easy 1-many relationship.
public virtual ICollection<Foo> Foos { get; set; }
// Props for hard 1-0..1 relationship.
public int? SpecialFooId { get; set; }
public virtual Foo SpecialFoo { get; set; }
}
Я совсем не уверен, чтоэта модель предметного объекта является правильной для EF, и у меня нет слабостейНе знаю, как его настроить.
Кто-нибудь знает, как заставить это работать?