2012-04-06 93 views
2

我正在使用ADO.NET实体框架在C#中开发应用程序。如何将项目添加到ADO.NET实体框架中的实体

在网上我看到的是,为了添加元素,newProduct,一个实体的许多例子,让我们假设Product,它使用了下面的代码:

context.Products.Add(newProduct); 

的方法添加,但是,它不是Products的成员,所以我不能使用它。也许在例子中使用的EF是LinqToSQL。

然而,在ADO.NET有一个方法AddObject

context.AddObject("Products", newProduct) 

和它的作品,但我不喜欢它的原因有两个:

1)我尽量避免多尽可能魔术字符串除非他们真的是唯一实施功能的手段

2)它给出void作为返回类型,如何检查插入是否良好?

我相信有另一种方式来插入我的实体。任何人都可以帮忙?

回答

4

1)我尽量避免尽可能多的魔法字符串,除非它们是 真正唯一的手段来实现的功能

如果contextObjectContext(EF < = 4.0),你应该通常在派生的上下文中有一个成员,代表ObjectSet<Product>,名称Products或类似。您可以使用,那么:

context.Products.AddObject(newProduct); 

即使你没有在你的背景下这样一组还有另外一个强类型的选项:

context.CreateObjectSet<Product>().AddObject(newProduct); 

2)它给空当一回类型,我如何检查插入 是否好?

AddObject不会将INSERT插入到数据库中。它只会将对象置于objectContext中的Added状态。当您拨打SaveChanges时,真正的INSERT将在一笔交易中发生。

尽管如此,AddObject可能会失败,也许如果您将具有相同密钥的两个对象添加到上下文中(如果您的实体没有为该密钥自动生成身份)或其他原因。如果是这样,AddObject会抛出一个你不应该捕获的异常,因为它通常表示你的代码中存在严重的问题或错误。

SaveChanges返回int。但这int并不表示SaveChanges和插入您的对象是成功的。它只计算在语句执行前有Added状态(将导致INSERT语句),Modified状态(将导致UPDATE语句)和Deleted状态(将导致DELETE语句)的数量对象。

同样,如果任何SQL语句(如INSERT)不成功,SaveChanges将引发异常。这个异常可以表示客户端已经存在的问题,或者它可以告诉你在SQL操作期间发生了问题 - 例如:对于失败的INSERT,异常可能会给你一条消息,说明INSERT失败了,因为已经有了一行关键字你想插入到数据库中,或者需要不可为空的列没有被填充到你想要插入的实体中,等等。由于并发问题的异常在许多其他异常类型中也是可能的。

您可以检查是否成功通过捕获可能出现的异常SaveChanges

try 
{ 
    int numberOfObjects = context.SaveChanges(); 
} 
catch (SomeExceptionType e) 
{ 
    // What now? 
} 

BTW:该context.Products.Add(...)你见过最有可能是一个例子,其中contextDbContext(EF> = 4.1)。 DbContext是一个简化的API到实体框架(它仍然使用核心ObjectContext下)。在此API中,插入新实体的方法实际上被称为Add(方法DbSet<T>)而不是AddObject

+0

嗯,我能说什么......这是一个答案的地狱。非常感谢您的时间 – CiccioMiami 2012-04-07 03:47:55