Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core 3:当SaveChanges()时所有者属性插入失败_C#_Entity Framework Core - Fatal编程技术网

C# EF Core 3:当SaveChanges()时所有者属性插入失败

C# EF Core 3:当SaveChanges()时所有者属性插入失败,c#,entity-framework-core,C#,Entity Framework Core,我的问题:插入具有自有属性的实体失败 我有一家餐厅实体,拥有地址自有财产。当我尝试创建一个新实体并将其插入数据库时,会在SaveChanges处引发一个异常: 无法将值NULL插入表“AppRefDB.dbo.Addresses”的列“RestaurantId”;列不允许空值。插入失败 我所做的 我的表地址如下所示: CREATE TABLE [dbo].[Addresses] ( [RestaurantId] INT NOT NULL, [Number] NVARCHAR(8

我的问题:插入具有自有属性的实体失败

我有一家
餐厅
实体,拥有
地址
自有财产。当我尝试创建一个新实体并将其插入数据库时,会在
SaveChanges
处引发一个异常:

无法将值NULL插入表“AppRefDB.dbo.Addresses”的列“RestaurantId”;列不允许空值。插入失败

我所做的

我的表
地址
如下所示:

CREATE TABLE [dbo].[Addresses]
(
    [RestaurantId] INT NOT NULL, 
    [Number] NVARCHAR(8) NULL, 
    [Street] NVARCHAR(150) NOT NULL, 
    [Zip] NVARCHAR(10) NOT NULL, 
    [Town] NVARCHAR(50) NOT NULL, 
    [Site] NVARCHAR(150) NULL ,

    CONSTRAINT [PK_Addresses] 
        PRIMARY KEY ([RestaurantId]),
    CONSTRAINT [FK_Address_Restaurants_RestaurantId] 
        FOREIGN KEY ([RestaurantId]) REFERENCES [Restaurants] ([Id]) 
                ON DELETE CASCADE
)
await _dbContext.Set<Restaurant>()
        .AddAsync(restaurant, cancellationToken);
_dbContext.SaveChangesAsync();      
其中,
RestaurantId
是主键,
Restaurant
表中的FK

我在
OnModelCreating
中这样定义了我的属性:

modelBuilder.Entity<Restaurant>()
    .OwnsOne(p => p.Address)
    .ToTable("Addresses");
编辑2:
我还测试了一个同步版本

在本例中,您有一个具有地址集合的类对象

using (var context = new YourContext())
{
var model= new Restaurant{ Name = "McDonald's" };
model.addresses.Add(new addresses{ street="test",.... });
model.addresses.Add(new addresses{ street="test",.... });

context.Restaurant.Add(model);
context.SaveChanges();
}
这会解决你的问题

您可以在两个类中都添加

public ICollection<YourEntity> YourEntity{ get; set; }

如果在地址实体中添加此项,则需要先创建一个Resturan,然后分别添加地址

事实上,这可能是EF 3.0中的一个错误
我使用EF 3.1(预览版)进行了测试,效果良好

一家餐厅可以有多个地址?或者您可以添加更多关于您的模型的详细信息吗?您可以先创建一个餐厅,然后向其中添加地址模型。如果使用ef,则可以创建导航,然后向导航添加属性。不需要太多地址。这是一个玩具项目,我尝试测试一些新工具。但这可能是一种情况,我想理解。但无论如何,savinf地址是一个很好的解决方案。模型需要每个餐厅都有一个地址。使用owned property甚至是强化此功能的一种方式。很好,你能提供有关你的模型的详细信息吗?我刚刚在问题中添加了我的模型。这不起作用。这和我做的没什么不同哦你的模型不支持这种方式@FrédéricDeLèneMirouze@FrédéricDeLèneMirouze我根据您的模型添加解决方案
using (var context = new YourContext())
{
var model= new Restaurant{ Name = "McDonald's" };
model.addresses.Add(new addresses{ street="test",.... });
model.addresses.Add(new addresses{ street="test",.... });

context.Restaurant.Add(model);
context.SaveChanges();
}
public ICollection<YourEntity> YourEntity{ get; set; }
    [ForeignKey("Restaurant")]
    public long RestaurantId { get; set; }
    public Restaurant Restaurant{ get; set; }